此当前代码在直立状态下反复运行低音,直到它开始扭曲声音并且运行不良。如何在完成运行后处理声音并停止运行多次,因为我希望声音只有在它进入直立状态时播放一次。谢谢亚历克斯。
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 :(得分:1)
您不应该创建新声音并在每次想要播放时将其处理掉。这是浪费时间重复加载它。将加载的声音存储在数组中,或使用AssetManager加载它们并从那里获取引用。
您的playSound
方法看起来像这样:
public void playSound (String soundFileName){
sound = assetManager.get(soundFileName, Sound.class);
sound.play();
}
顺便说一下,将音量设置为3是没有意义的,因为它的音量为0-1。
如果你想在状态改变时只发生一次事情,那么在状态改变时调用该方法,而不是像你正在做的那样在每一帧上调用。
即。这样做:
//...
if(accelZ > 9 && accelZ < 11){
state = "UPRIGHT";
playSound("uprightStateChange.wav");
}