我有各种颜色按钮,可以在点击时更改动画片段的颜色,但我想编写类似if btnRed has been clicked, apply red ColorTransform
的代码。这是因为我有多个按钮,我不想编写几乎相同的方法,只是使用不同的RGB乘数值。有没有办法做到这一点,以便每个按钮的事件监听器调用相同的方法,但然后在该方法中它基本上说if redBtn is clicked, change color to red
,if blueBtn is clicked, change color to blue
等。
答案 0 :(得分:2)
如M4tchB0X3r所示,使用Dictionary
存储按钮对象的颜色转换查找。这是工作代码,假设您的按钮名称为btnRed
,btnGreen
和btnBlue
,并且您在舞台上有一些名为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
获取相应的颜色值,例如Dictionary
或Object
。
你也可以将你的按钮保存在字典中并循环浏览它以找到你的颜色。