如何检测是否已单击特定按钮?

时间:2014-01-30 18:15:07

标签: actionscript-3 flash

我有各种颜色按钮,可以在点击时更改动画片段的颜色,但我想编写类似if btnRed has been clicked, apply red ColorTransform的代码。这是因为我有多个按钮,我不想编写几乎相同的方法,只是使用不同的RGB乘数值。有没有办法做到这一点,以便每个按钮的事件监听器调用相同的方法,但然后在该方法中它基本上说if redBtn is clicked, change color to redif blueBtn is clicked, change color to blue等。

2 个答案:

答案 0 :(得分:2)

如M4tchB0X3r所示,使用Dictionary存储按钮对象的颜色转换查找。这是工作代码,假设您的按钮名称为btnRedbtnGreenbtnBlue,并且您在舞台上有一些名为box1的命名对象。

这里的关键点是Dictionary可以使用对象引用作为键(不仅仅是简单Object类型的整数和字符串),还有target属性Event对象包含引发事件的事物的引用 - 在本例中是一个按钮。事实上,使用currentTarget可能更安全,因为有时target是父或子显示对象,因为事件可以在树上上下滚动。

import flash.utils.Dictionary;
import flash.geom.ColorTransform;  

var buttonToTransform:Dictionary = new Dictionary();
buttonToTransform[btnRed]   = new ColorTransform(1.0, 0.2, 0.2);
buttonToTransform[btnGreen] = new ColorTransform(0.2, 1.0, 0.2);
buttonToTransform[btnBlue]  = new ColorTransform(0.2, 0.2, 1.0);

// Note: for..in iterates over the keys of an object
// (vs. for each, which iterates over the values)
for(var btn:* in buttonToTransform) { 
    btn.addEventListener(MouseEvent.CLICK, onTransform);
}

function onTransform(e:MouseEvent):void { 
    this.box1.transform.colorTransform = buttonToTransform[e.currentTarget];
}

答案 1 :(得分:0)

将所有按钮保存在数组中,在CLICK事件确定中使用buttonArray.indexOf(event.target);按下哪个按钮 然后从map获取相应的颜色值,例如DictionaryObject

你也可以将你的按钮保存在字典中并循环浏览它以找到你的颜色。