2015-09-03 43 views
0

我有這種情況下,當一個球被扔進一桶水。水桶有四個水平面,它們排列在水桶內的四個框架內。使用hitTestObject我跳躍,每次球落在水中時,水桶中的水位將下降一個水平。但事實證明,只要球繼續向下,它將觸發nextFrame,所以它不會停在下一幀,而是通過所有幀。任何解決方案nextFrame();這不會停在下一幀

if (yesh8gBall21.hitTestObject(yesh8allBuckets1)) { 
    yesh8allBuckets1.nextFrame();} 

回答

0

這一個似乎工作。代碼在事件處理程序/偵聽器中,我只需要在適當的時候刪除偵聽器。

import flash.events.MouseEvent; 
import flash.events.Event; 
stop(); 

button1.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler1); 
function mouseDownHandler1(event: MouseEvent): void { 
    yesh8gBall21.gotoAndPlay(1); 
} 

this.addEventListener(Event.ENTER_FRAME, handle8Collision2); 

function handle8Collision2(evt: Event): void { 

    if (yesh8gBall21.hitTestObject(yesh8allBuckets1)) { 
     removeEventListener(Event.ENTER_FRAME, handle8Collision2); 
     yesh8allBuckets1.nextFrame(); 
    } 
} 
+0

一樣工作如果你使用輸入幀處理程序是一次碰撞檢查,那麼這是更有效的解決方案(沒有意義繼續檢查每一幀你的條件已經滿足) – BadFeelingAboutThis

0

您可以在水中給球一個屬性並在啓動時將其設置爲false。

if (yesh8gBall21.hitTestObject(yesh8allBuckets1) && !yesh8gBall21.inWater) { 
    yesh8gBall21.inWater = true; 
    yesh8allBuckets1.nextFrame(); 
} 
+0

沒有,沒有發生,甚至沒有去一個新的水平。原諒我的菜鳥問題。除了複製和過去之外,我還必須做其他事情來替代我的代碼嗎? – SBA

+0

如果此代碼不轉到下一幀,(yesh8gBall21.inWater == false)不會返回true。我的AS3有點生疏,我沒有準備好編譯器,但是你可能需要在init初始化時聲明inWater = false。追蹤其價值也有幫助。 –

+0

'false'和'undefined'不是一回事,那就是這個答案的問題。直到你將'yesh8gBall21.inWater'設置爲某個值,它是'undefined',所以'yesh8gBall21.inWater == false'將會是'false',而不是'!yesh8gBall21.inWater'。儘管如果你事先將這個值設置爲false(就像你在回答開始時提到的那樣),它應該像 – BadFeelingAboutThis