2014-12-01 73 views
0

我有第一次打到第二幀的第二次擊球的磚塊,第二次打到第三幀並且動畫播放到第40幀。然後當前幀屬性被假定執行_root.brickAmt - 在第40幀,但它不起作用。你能告訴我爲什麼嗎?我該如何解決這個問題?謝謝!as3當前幀檢查

if (this.hitTestObject(_root.mcBall)){ 
    if (this.currentFrame == 1){ 
    this.gotoAndStop(2) 
    } else if (this.currentFrame == 2) {      
       this.gotoAndPlay(3) 
     } 
     if (this.currentFrame == 40) {      

removeEventListener(Event.ENTER_FRAME, enterFrameEvents); 
       _root.brickAmt --; 
     } 

回答

1

正如評論所說,在時間軸上書面方式代碼通常不是一個很好的做法,但這裏有一些事情需要注意:

1 - 除非你把你的代碼在每一個關鍵幀,它會執行一次。 1.1-如果你希望它執行每一幀沒有做幾十個關鍵幀,並複製到任何地方,你應該把它放在一個函數裏,讓這個函數在一些監聽器上調用,理想情況下調用event.enter_frame

2- if檢查框架是否爲40,在檢查撞擊內,你確定框架40,球和磚是否觸摸?

3-我也不能確定你正在使用AS2或AS3,在AS3 _root應該由MovieClip(根)來代替

編輯: 因爲我使用我無法打開的.fla一箇舊版本,但相當於你在評論中說的話我敢肯定代碼應該是這樣的:

private function enterFrameEvents(event:Event):void{ 
    // [...] previous code 
    if (this.hitTestObject(_root.mcBall)){ 
    if (this.currentFrame == 1){ 
     this.gotoAndStop(2) 
    } else if (this.currentFrame == 2) {      
     this.gotoAndPlay(3) 
    } 
    } // <- Notice this 
    if (this.currentFrame == 40) {      
    removeEventListener(Event.ENTER_FRAME, enterFrameEvents); 
    _root.brickAmt --; 
    } 
} 
+1

是的,它是As3 ....困難的部分是不應該在第40幀發生衝突,它應該只是執行磚Amt--當它到達該幀。如果你刪除} 如果(this.currentFrame == 40)它工作的機器人沒有去幀40,因此沒有動畫。你可以看看嗎? https://app.box.com/s/whbrlx5lrr7avmsx3a9k – Johnnien 2014-12-03 17:51:42

+0

非常感謝你!就是這樣......只是一個括號......我很抱歉,我沒有立即看到你的答案的更新....(已經有警告禁止從這個網站的要求這樣愚蠢的問題)。你很棒!謝謝! – Johnnien 2014-12-04 20:18:47

+0

沒有ofense,但看起來你的代碼是如何格式化的(在你提供的源代碼上)並不奇怪。 只是一個提示,adobe flash在你編寫代碼的地方有一個按鈕,它可以自動格式化代碼,所以它看起來不奇怪,並希望你可以避免愚蠢的錯誤。 – Ignasi 2014-12-04 22:44:24

0

如果這個代碼不運行的每一幀的功能裏面,有超過40架,你可能會錯過它傳遞40幀 如果沒有,檢查的的時間表,並確保沒有否則在它到達幀40之前正在中斷它的進度。

您還可以將一條trace語句放入ENTER_FRAME函數中,以查看它是否在任何位置之間停止。

// in a function inside the object that runs every frame 
trace(this.currentFrame); 
+0

謝謝!如果我有if(this.hitTestObject(_root.mcBall))if(this.currentFrame == 1){this.gotoAndStop(2) } else if(this.currentFrame == 2){ this .gotoAndPlay(3)}它的工作原理。我可以說這個。 gotoandPlay 3到40,然後執行brickAmt--。我如何在代碼中使用它? – Johnnien 2014-12-02 15:13:44

+0

我試過trace(this.currentFrame);我認爲這是行不通的,因爲它是從一個更大的項目的15個框架中的一個班級中調用的。 – Johnnien 2014-12-02 15:14:40

+0

可能有一百萬個原因,具體取決於嵌套對象的結構,時間軸上的代碼以及每個時間軸上的哪個部分是給定時間的程序流。 – 2014-12-02 17:38:17