【问题标题】:Looping for events in actionscript 3, only get last number循环操作脚本 3 中的事件,仅获取最后一个数字
【发布时间】: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 的最后一个值而不是分配它。你对如何按照我的预期做这个有什么想法吗?是否不可能更快地完成此操作并且不指定按钮来执行相同的操作?

【问题讨论】:

    标签: arrays actionscript-3 loops flash events


    【解决方案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]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 2015-03-10
      • 2016-01-31
      • 1970-01-01
      • 2018-12-29
      • 2021-08-31
      • 2018-08-17
      相关资源
      最近更新 更多