2012-06-08 4 views
4

AndEngine으로 간단한 게임을 만들고 있습니다. 공이 바닥쪽으로 떨어지고 바닥과 충돌 할 때마다 나는 짧은 충돌 소리를 내고 싶다. onUpdate() 메서드에서 충돌을 확인하고 그에 따라 사운드를 재생합니다.AndEngine - 사운드 재생시 뒤처짐

사운드 재생을 위해 Sound 클래스를 사용합니다 (AndEngine의 SoundExample에서와 같이). 삼성 Galaxy S2에 대한 테스트.

사운드가 재생 될 때 프로그램의 지연이 문제입니다. 그리고 심지어 게임 물리학에 영향을 미칩니다 (때로는 공이 소리를 비활성화 할 때 가장 높은 지점보다 높게 튀는 경우가 있습니다).

public void onUpdate(float pSecondsElapsed) { 
// mSound.play();  
if (this.mSprite.collidesWith(ball.getSprite())) {   
    if (!colliding && mSound != null){ // play sound for first collision only 
     mSound.play();   
     colliding = true; 
    } 
} 
else{ 
    colliding = false; 
} 

}

내가 mSound.play()를 제거하거나 사운드를 재생 유지하는 경우 (2 호선에서 주석을 제거)이 프로그램이 원활하게 작동합니다

는 코드입니다.

누구에게도 동일한 문제가 발생합니까? 그리고 지연을 없애기위한 해결책이 있습니까? 많은 감사합니다!

+1

.play()를 호출하여이 문제를 간단하게 극복 할 수있었습니다. 매회 새로운 스레드. 최선의 해결책은 아닐지 모르지만, 이것은 지연을 제거했습니다. – Ixanezis

답변

1

당신이 소리를 계속 연주 할 때 원활하게 작동하는지 언급 한 바와 같이 .. 다음 문제는 collidesWith() 메소드는,의 onUpdate는 매 프레임마다 호출되는 것을 기억 아마 당신의 범인 소리

하지입니다. 어쩌면 코드를 재 설계하거나 초당 프레임 수를 제한해야합니다. [FixedStepEngine을 사용하도록 엔진 옵션을 변경하십시오]

+0

아니요, 사운드를 재생하기 위해 onUpdate 외부에 새 스레드를 만들지 만 (1 시간/초), 여전히 문제가 발생합니다. – Jack

관련 문제