2012-07-27 80 views
0

好的,這裏是一個更關於我認爲的方法的問題。我對此很新,因此我認爲有一個錯誤的方法。AS3 addChild PARADOX。

我想做一個「遊戲」,每次點擊時,舞臺創建一個addChild。 搜索低谷幾個地點,用我有限的知識,並試圖來回後,我已經達到了這樣的結論:

mouse.addEventListener(MouseEvent.CLICK, CREATE); 
function CREATE(e:Event):void { 
    var square:MovieClip = new squarelink(); 
    addChild(square); 
    square.x = mouseX; 
    square.y = mouseY; 
} 

現在我的問題是,我想代碼時,給這個新的MovieClip一些「事件」,但因爲我的動畫片段在我點擊後纔會出現在舞臺上。其名稱中的任何addeventlistener將作爲:訪問可能未定義的屬性。這導致我的瑞士法郎失敗。

因此,我試圖設置「var square:MovieClip = new squarelink();」超出我的CREATE功能。這只是導致它只是移動廣場,因爲我點擊了,而不是一次創建新的。如何讓我現在可以添加事件。

所以總結一下。我需要一種方法,允許我創建幾個「孩子」,並讓我添加一個事件,說明如果我再次單擊它:刪除它自己。

這沒有告訴我,舞臺上還沒有任何廣場。

(這是對問題的解釋,對拼寫錯誤的任何評論,或者「你需要一個大R才能工作」是值得歡迎的,但可能無法使用。我知道如何正確編寫代碼,我只是不知道寫哪些代碼。)

我希望這個問題是一些很好的解釋,我希望有人在這裏可以幫助,因爲有1個月,直到我回到學校問我的老師。 :D

回答

0

以上代碼用於在舞臺上創建一個動畫片段實例。要刪除影片剪輯,您需要附加一個帶有該影片剪輯的類。在該類中,添加一個必須刪除包含的影片剪輯的事件監聽器。

0

addChild PARADOX ??無論如何,我所知道的是,你需要:

  • 在舞臺上點擊舞臺上添加movieclip。
  • 刪除一次點擊movieclip &然後再次點擊。

如果是這樣的話,用這個作爲一個例子:

stop(); 

stage.addEventListener(MouseEvent.CLICK, createBox); 

function createBox(e:MouseEvent) { 

    if(e.target != stage) return; 

    var square:MovieClip = new MovieClip(); 

    square.graphics.beginFill(0,1); 
    square.graphics.drawRect(0,0,25,25); 
    square.graphics.endFill(); 

    square.x = 100; 
    square.y = 100; 
    square.name = "mc" + this.numChildren; 

    square.addEventListener(MouseEvent.CLICK, function(e) { 

     var sq:MovieClip = e.currentTarget; 

     if(sq.name.charAt(0) == '_') removeChild(sq); 

     else sq.name = "_" + sq.name;  
    }); 

    addChild(square); 
} 
1

你應該制定一個更復雜的,面向對象的解決您的問題。有一個主要的應用程序類來創建對象,並讓創建的對象向創建者對象發送「請移除我」事件。

然而,考慮到你在這裏給出的這個簡單的例子,有一個簡單的解決方案,包括從點擊的對象停止事件傳播到舞臺。

stage.addEventListener(MouseEvent.CLICK, createCircle); 
function createCircle(event:MouseEvent):void 
{ 
    var circle:Sprite = new Sprite(); 
    circle.graphics.beginFill(0x00FF00); 
    circle.graphics.drawCircle(0, 0, 20); 
    circle.x = stage.mouseX; 
    circle.y = stage.mouseY; 
    stage.addChild(circle); 

    circle.addEventListener(MouseEvent.CLICK, removeCircle); 
} 

function removeCircle(event:MouseEvent):void 
{ 
    stage.removeChild(event.currentTarget as DisplayObject); 

    // magic! 
    event.stopPropagation(); 
}