2012-01-03 17 views
0

开始时我的舞台是空的,我有一个空数组和一些全局变量,并且我的库中有两个影片剪辑:一个是触发器,第二个是触发器上放置在舞台上的影片剪辑被激活(如果你想要的话,可以使用testdummy)。如何将函数应用于数组中的每个影片剪辑?

var dummies:Array = []; 
var i:int = 300; 
var j:int = 500; 
var k:int = 0; 

然后我放置触发的实例在舞台上

var testaddbutton:AdditionButton = new AdditionButton(); 
addChild(testaddbutton); 
testaddbutton.x = i; 
testaddbutton.y = i; 

然后我描述了触发影片剪辑的行为。当被点击时,虚设剪辑的新实例被放置在阶段,被插入到阵列中,并且所创建的实例内最后某些动态文本字段被分配一定值(而不是点真的)

testaddbutton.addEventListener(MouseEvent.CLICK, placedummy); 

function placedummy(evt:MouseEvent):void { 
    var dummy:Dummy = new Dummy(); 
    addChild(dummy); 
    dummies.push(dummy); 
    dummies[k].x=i + l*100; 
    dummies[k].y=j; 
    k++; 
    dummy.dummyindex.text = k.toString(); 
} 

但随后我面临一个问题。我希望傻瓜在被点击时执行一个功能。当我尝试添加一个事件监听接到虚...

//dummy.addEventListener(MouseEvent.CLICK, showlifesigns); 
//function showlifesigns(evt:MouseEvent):void { 
// trace ("pew"); 
//} 

...我得到一个明显的错误:场景1,图层“行动”,第1帧,66号线1120:未定义的属性虚拟的访问。因为在一个函数中创建了虚拟变量。虽然我在'傻瓜'阵列中处理项目时没有任何问题。

虽然假人是由相同的模式,其中存储的数据是创建应用程序的整个点。

所以问题是:我如何将一个函数应用到每个这些虚拟变量上,这些虚拟变量在点击时执行并且只影响一个虚拟变量?

在此先感谢

+0

这是您的实际监听器代码吗?该错误表示找不到'userevent',并且在您发布的代码中没有'userevent'。 – taskinoor 2012-01-03 19:16:42

+0

jee,对不起,我在发帖之前编辑过名字,忘了修正那个。 – 2012-01-03 19:18:43

+0

没问题,修正了错误。 – 2012-01-03 19:19:42

回答

1

只需拨打addEventListenerdummy仍然是一个有效的参考 - 在您使用您创建的每个dummy项相同的功能:

function placedummy(evt:MouseEvent):void { 
    var dummy:Dummy = new Dummy(); 
    addChild(dummy); 

    // Add the event listener right here! 
    dummy.addEventListener(MouseEvent.CLICK, showlifesigns); 

    dummies.push(dummy); 
    dummies[k].x=i + l*100; 
    dummies[k].y=j; 
    k++; 
    dummy.dummyindex.text = k.toString(); 
} 
+0

工作完美,欢呼! – 2012-01-03 19:33:56

+0

@Loki - 同时注意taskinoor关于使用event.target属性来确定哪个虚拟被点击的评论 – 2012-01-03 19:36:19

+0

已经完成,谢谢。 刚开始学习AS3。所以把一个eventlistener放在一个函数里似乎是错误的:) – 2012-01-03 19:39:48

0

变量dummy的范围是placedummy功能。所以你不能在这个函数之外引用它。您需要在该函数内移动侦听器添加代码。

function placedummy(evt:MouseEvent):void { 
    // other stuffs 
    dummy.addEventListener(MouseEvent.CLICK, showlifesigns); 
} 

现在所有创建的dummy都将监听事件。在事件监听器showlifesigns中,您可以使用evt.target来获取单击的特定dummy

function showlifesigns(evt:MouseEvent):void { 
    var clickedDummy:Dummy = evt.target as Dummy; 
    // do stuff with clickedDummy 
} 
+0

请注意,因为我也可能会面对这个问题(解决点击假人),谢谢。 – 2012-01-03 19:35:35