循环操作脚本 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的闭包特性如何给循环中的对象添加事件

如何仅从 JSON 数据中获取最后 10 个对象

原生js基础入门

原生js基础入门

为啥我在 PL/SQL 中的 for 循环没有打印出最后一次迭代

Vue 3 & Composition API:v-for 循环中的模板引用错误:仅获取代理