循环操作脚本 3 中的事件,仅获取最后一个数字
Posted
技术标签:
【中文标题】循环操作脚本 3 中的事件,仅获取最后一个数字【英文标题】:Looping for events in actionscript 3, only get last number 【发布时间】:2016-09-15 19:25:52 【问题描述】:所以我想通过制作我拥有的所有按钮的数组来更快地编码,并制作一个函数数组,其中索引号连接到每个按钮的数组。
例如,buttons[0]
,hover 的处理程序事件是 button_over_funcs[0]
,而 out 的处理程序事件是 button_out_funcs[0]
。
为了更清楚(因为英语不是我的第一语言),看看我的代码:
var buttons:Array = [playbtn, tutorialbtn];
var button_over_funcs:Array = new Array();
var button_out_funcs:Array = new Array();
var i = 0;
for each(var j in buttons)
j.buttonMode = true;
button_over_funcs.push(function(e:MouseEvent)
j.gotoAndPlay("hover");
);
button_out_funcs.push(function(e:MouseEvent)
j.gotoAndPlay("out");
);
j.addEventListener(MouseEvent.ROLL_OVER, button_over_funcs[i]);
j.addEventListener(MouseEvent.ROLL_OUT, button_out_funcs[i]);
i++;
但 j 将始终指代 tutorialbtn,无论我悬停/退出哪个按钮。我也试过for-in
var buttons:Array = [playbtn, tutorialbtn];
var button_over_funcs:Array = new Array();
var button_out_funcs:Array = new Array();
for(var j in buttons)
buttons[j].buttonMode = true;
button_over_funcs.push(function(e:MouseEvent)
buttons[j].gotoAndPlay("hover");
);
button_out_funcs.push(function(e:MouseEvent)
buttons[j].gotoAndPlay("out");
);
buttons[j].addEventListener(MouseEvent.ROLL_OVER, button_over_funcs[j]);
buttons[j].addEventListener(MouseEvent.ROLL_OUT, button_out_funcs[j]);
两者看起来都一样。似乎动作脚本总是引用 j 的最后一个值而不是分配它。你对如何按照我的预期做这个有什么想法吗?是否不可能更快地完成此操作并且不指定按钮来执行相同的操作?
【问题讨论】:
【参考方案1】:重新发明***没有意义。使用SimpleButton
并完成它。
一般来说:当您想要定义多个对象共有的行为时,可以使用类。
【讨论】:
谢谢你的建议,我刚刚搜索了一下。但是我在设计学校,我们只允许使用按钮符号,而不是代码生成的按钮。顺便说一句,我已经找到了解决问题的方法。再次感谢您,非常感谢您的建议,稍后会尝试。 @NathanielMannawi 按钮符号是SimpleButton
!按钮符号负责更改为悬停状态的所有功能。您正在重新创建已经存在的功能,只需使用它。
但我认为您必须使用Sprite
以编程方式绘制按钮?我们预计用手绘制它并创建符号,并在以后控制它。是否可以在已使用工具在屏幕上绘制的对象上使用SimpleButton
?【参考方案2】:
所以我自己找到了路。如果你发现和我一样的问题,可以看看。
var buttons:Array = [playbtn, tutorialbtn];
var button_over_funcs:Array = new Array();
var button_out_funcs:Array = new Array();
function addOver(ob)
button_over_funcs.push(function(e:MouseEvent)
ob.gotoAndPlay("hover");
);
function addOut(ob)
button_out_funcs.push(function(e:MouseEvent)
ob.gotoAndPlay("out");
);
function addEvent(ob)
addOver(ob);
addOut(ob);
for each(var j in buttons)
addEvent(j)
for(var i = 0; i<= buttons.length - 1; i++)
buttons[i].buttonMode = true;
buttons[i].addEventListener(MouseEvent.ROLL_OVER, button_over_funcs[i]);
buttons[i].addEventListener(MouseEvent.ROLL_OUT, button_out_funcs[i]);
【讨论】:
以上是关于循环操作脚本 3 中的事件,仅获取最后一个数字的主要内容,如果未能解决你的问题,请参考以下文章
深入理解JavaScript的闭包特性如何给循环中的对象添加事件