2014-03-28 43 views
0

我的代碼是在場景的registerupdatehandler ..的Android AndEngine播放聲音一度跌破只

if (B.collidesWith(l)){ 
              mSound.play(); 
             } 
目前

,它就會反覆播放,直到B得到從l(非碰撞)的距離。

更新:

   /* The actual collision-checking. */ 
       mScene.registerUpdateHandler(new IUpdateHandler() { 
        @Override 
        public void reset() { 
        } 

        @Override 
        public void onUpdate(final float pSecondsElapsed) { 

         if (B.collidesWith(l)){ 
            if (!mHasPlayed) { 
             Log.i("CONTACT", "BETWEEN B and L!"); 
             mSound.play(); 
             mHasPlayed = true; 
            } else { 
             mHasPlayed = false; 
            } 
           } 
          } 


       }); 

回答

3

跟蹤,如果你有一個成員變量播放的聲音此碰撞事件還。

private boolean mHasPlayed = false; 

// ... rest of code 

if (B.collidesWith(l)) { 
    if (!mHasPlayed) 
     mSound.play(); 

    mHasPlayed = true; 
} else { 
    mHasPlayed = false; 
} 
+0

將logcat添加到'else'部分,看看是否在兩者之間調用重置'mHasPlayed'。 – dharms

+0

它被稱爲5次相同的其他logcat,都是5次..所以聲音播放5次 –

+0

你可以發佈你如何更新'B'的位置?我認爲這可能與此有關。看起來'collidesWith()'的結果現在不可靠。 – dharms