2016-06-16 7 views
0

この現在のコードは、直立状態のときに低音を繰り返して音が歪んで動作しなくなるまで繰り返します。私はそれが直立状態になったときに一度再生する音をしたいので、それは実行を終了し、それを複数回実行することを停止すると、私はどのように音を処分するだろう。アレックスに感謝します。Libgdx Soundが終了しました

public void determineState(){ 
     accelX = Gdx.input.getAccelerometerX(); 
     accelY = Gdx.input.getAccelerometerY(); 
     accelZ = Gdx.input.getAccelerometerZ(); 

     state = "NULL"; 

     if(accelX < 1 && accelX > -1){ 
      if(accelY > -1 && accelY < 1){ 
       if(accelZ > 9 && accelZ < 11){ 
        state = "UPRIGHT"; 
       } 
      } 
     } 

    } 

public void playSound(String soundString){ 
     System.out.println(soundString); 
     if(soundString != "null"){ 
      sound = Gdx.audio.newSound(Gdx.files.internal(soundString + ".wav")); 
      long id = sound.play(); 
      sound.setVolume(id, 3); 
     }else if (soundString == "null"){ 
     } 
    } 
+0

はなぜ、あなたの状態の文字列の代わりに、列挙型やint型ですか?非常にエラーが発生しやすいようです。 – Tenfour04

+0

ええ、私は列挙型を実装しようとしましたが、少し苦労していたので、すべての名前を非常に簡単に制御できるので、文字列を使用しました。 @ Tenfour04 –

答えて

1

あなたは新しいサウンドを作成し、それをあなたがそれを再生するたびに処分してはなりません。これは何度も何度も再ロードする時間を無駄にしています。ロードされたサウンドを配列に格納するか、AssetManagerでロードしてそこから参照を取得します。

playSound方法は、次のようなものになりますあなたの:ところで

public void playSound (String soundFileName){ 
    sound = assetManager.get(soundFileName, Sound.class); 
    sound.play(); 
} 

を、それが0-1スケールでだから3にボリュームを設定しても意味がありません。

ステートが変化したときに何かを起こしたい場合は、ステートが変化したときにそのメソッドを呼び出すよりも、フレームのすべてではなく、そのようにしてください。

すなわち、次の操作を行います。

//... 
if(accelZ > 9 && accelZ < 11){ 
    state = "UPRIGHT"; 
    playSound("uprightStateChange.wav"); 
} 
関連する問題