使用for循环创建了10个Shape以后,我需要当点击某个元素时,设置其属性,如将他的透明度变为
private p=50;
for(i=0;i<=10;i++)
{
var spe:Shape = new Shape;
spe.graphics.beginFill(0xFF0000);
spe.graphics.drawRect(p, p, p+100, p+100);
spe.graphics.endFill();
p+=100;
spe.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown)
}
private function onMouseDown(e:MouseEvent):void
{
//使用for循环创建了10个Shape以后,我需要当点击某个元素时,设置其属性,如将他的透明度变为 -> alpha = 0.5
//怎么写呢。。。。。。。。。
}
[解决办法]
首先Shape为形状。不能添加鼠标监听。所以改为sprite
import flash.events.MouseEvent;import flash.display.Sprite;for (var i:int=0; i<=10; i++){ var spe:Sprite = new Sprite(); spe.graphics.beginFill(0xFF0000); spe.graphics.drawRect(0, 0, 30, 30); spe.graphics.endFill(); addChild(spe); spe.x = i * 32; spe.y = 200; spe.name = "spe" + i.toString(); spe.addEventListener(MouseEvent.CLICK,mouseEvent);}function mouseEvent(e:MouseEvent):void{ //trace(e.target.name); var temp:String; switch (e.target.name) { case "spe0" : temp = "点击spe0"; break; case "spe1" : temp = "点击spe1"; break; case "spe2" : temp = "点击spe2"; break; default : temp = "其他"+e.target.name; break; } trace(temp);}
[解决办法]
补充楼上:
1)你的循环结束后,是11个,而非10个
2)为提高性能,不必每个sprite添加一个侦听器,为其外围容器添加一个侦听就可以了
import flash.display.Sprite;import flash.events.MouseEvent;var p:uint = 50;var holder:Sprite = new Sprite();holder.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDownHandler);this.addChild(holder);for(var i:uint = 0; i < 10; i++){ var s:Sprite = new Sprite(); s.graphics.beginFill(0xff0000); s.graphics.drawRect(p,p,p + 100,p + 100); s.graphics.endFill(); holder.addChild(s); p += 100;}function onMouseDownHandler(e:MouseEvent):void{ Sprite(e.target).alpha = 0.5;}