2012-01-03 20 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