for (var i=0; i<=98; i++) {
box1.addEventListener(MouseEvent.CLICK, func(i));
}
function func(i:int):Function{
return function paint(e:MouseEvent):void{
var myColorTransform:ColorTransform = new ColorTransform();
if (i%4==0) {
myColorTransform.color = 0xFF0000;
}
else if (i%4==1) {
myColorTransform.color = 0x0000FF;
}
else if (i%4==2) {
myColorTransform.color = 0x00FF00;
}
else if (i%4==3) {
myColorTransform.color = 0xFFFF00;
}
box1.transform.colorTransform = myColorTransform;
}
}
我希望以这样的方式在事件侦听器中运行循环:每当我单击对象时,它的颜色就会转换为下一个。上面的代码只改变颜色一次,并产生i(98)的最后一个值的颜色,即绿色。请帮忙。我是ActionScript的初学者。
答案 0 :(得分:1)
我认为它足够一个事件监听器和一些计数器。这样的事情(未经测试):
var clickCounter:uint = 0;
box1.addEventListener(MouseEvent.CLICK, onBoxClick);
function onBoxClick(event:MouseEvent):void {
var myColorTransform:ColorTransform = new ColorTransform();
if (clickCounter%4==0) {
myColorTransform.color = 0xFF0000;
}
else if (clickCounter%4==1) {
myColorTransform.color = 0x0000FF;
}
else if (clickCounter%4==2) {
myColorTransform.color = 0x00FF00;
}
else if (clickCounter%4==3) {
myColorTransform.color = 0xFFFF00;
}
box1.transform.colorTransform = myColorTransform;
clickCounter++;
}
答案 1 :(得分:0)
嗯..你不应该这样做,在你的例子中,每次你点击box1,你将触发98次func(),并且它最后一次触发,我是等于98,我不认为这是你所期待的......
最好的方法是将你的i存储在某个地方,例如你可以将它存储到box1中(如果它是一个动画片段),那么你可以在你的画中轻松地检索,阅读和增加它( ) 方法。 这样你只需要在box1上有1个addEventListener。