2011-04-11 3 views
1

저는 간단한 게임을 만들고 있어요, 화살표 키로 움직일 수있는 붉은 색 사각형입니다. 피니시 오브젝트를 만들었습니다. 이제, "플레이어"가 "피니시 오브젝트"와 교차하면 사운드가 재생되지만 사운드는 매번 재생됩니다. 나는 Thread.sleep()과 wait()를 시도했지만, 그것은 저의 게임 전체를 잠들게 만들었습니다. 내시 소리가 방법 :사운드 재생 사이의 지연?

public void playSound(String filename) throws IOException{ 
    InputStream in = new FileInputStream(filename); 
    AudioStream as = new AudioStream(in); 
    AudioPlayer.player.start(as); 
} 

내 playerfinishing의 교차 :

 //PLAYER1 LEVEL FINISHING 
    if(player.getBounds().intersects(levelfinish.getBounds())){ 
     message = "A winner is you!"; 
     try { 
      playSound("D:/BadGame/Sounds/winner.wav"); 
     } catch(Exception ex){ 
      ex.printStackTrace(); 
     } 
    } 

메시지가 화면의 중앙에 표시 단지 문자열, 모든 작품,하지만 너무 지연의 어떤 종류를 필요로 사운드는 끊임없이 재생되지 않지만 각 10 초 후 또는 교차 할 때만 한 번 재생됩니다. 너희들이 나에게이 일을하는 방법에 대한 단서를 줄 수 있니? 감사!

답변

0

사운드가 계속 재생되는 이유는 모든 틱마다 조건이 여전히 동일하기 때문입니다. 사운드가 끝난 후에도 교차 부분은 여전히 ​​유효하므로 사운드가 다시 재생됩니다.

반복을 막는 아주 단순한 방법은 사운드를 연주했는지 추적하기 위해 변수를 사용하는 것입니다. 이 검증되지 않은 있지만 이런 식으로 뭔가 : 모든 틱 변경되지 않습니다 곳이 부분을 넣어

: 함수에

boolean soundPlayed = false; 

사용이 부분은

//PLAYER1 LEVEL FINISHING 
if(player.getBounds().intersects(levelfinish.getBounds())){ 
     message = "A winner is you!"; 
     if (soundPlayed == false) { 
      try { 
       playSound("D:/BadGame/Sounds/winner.wav"); 
       soundPlayed = true; 
      } catch(Exception ex){ 
       ex.printStackTrace(); 
      } 
     } 
    } 
+0

음, 예제가 제대로 작동하지 않았습니다. 그것은 여전히 ​​노래를 연주합니다. 내가 들어 왔을 때 서로 빨리 연주 한 것처럼. 코드를 이해하지만 효과가없는 것 같습니다. – Stan

+0

분명히해야합니다. -이 코드가 모든 틱이라고하는 함수에 있으면 변수를 전역으로 만들어야합니다. 매번 변수가 변경되지 않아야합니다. – Nate

+0

그래, 나는 도움을 주셔서 감사합니다, 지금 완벽하게 작동합니다. – Stan

0

내가 조금 혼란 스러워요 진드기가 무슨 의미인지. 음악 재생을 한 번만 원한다면 부울 필드를 어딘가에 선언하여 이미 승자가 있는지 확인할 수 있습니다. 승자가없는 경우에만 소리를 재생하십시오.