我是LibGdx的新手,实际上我正在为Android设备创建一个简单的Libgdx游戏。
我在LibGdx中遇到播放/暂停音乐问题,这是简化代码。
//...
@Override
public void render(float delta) {
//...
if(inputHelper.isTouched()){
input.x = inputHelper.getScreenX();
input.y = inputHelper.getScreenY();
camera.unproject(input);
if(soundRect.contains(input.x, input.y)){
if(parent.getSound()) parent.pauseBackMusic();
if(!parent.getSound()) parent.playBacMusic();
}
}
}
//...
public void pauseBackMusic(){
if(backMusic.isPlaying()){
backMusic.pause();
isSound = false;
}
}
public void playBackMusic(){
if(!backMusic.isPlaying()){
backMusic.play();
isSound = true;
}
}
public Boolean getSound() {
return isSound;
}
正如您在代码中所看到的,当我触摸soundRect时,它在pauseBackMusic()和playBackMusic()之间循环。
谢谢。
最佳答案
您的问题是您使用了两个if语句:
if(parent.getSound()) parent.pauseBackMusic();
if(!parent.getSound()) parent.playBacMusic();
所以第一个陈述是正确的,因为
isSound = true
然后在此方法中调用方法
pauseBackMusic()
设置isSound = false
然后,您的下一个if语句将测试:
!parent.getSound()
这也是正确的,因为:isSound = false
和方法playBacMusic()
设置了isSound = true
然后从下一次单击开始。
使用else if语句代替:
if(parent.getSound()) parent.pauseBackMusic();
else if(!parent.getSound()) parent.playBacMusic();
因此,如果
parent.getSound()
为true,则else if语句将被跳过,而isSound
仍为false。并在下次单击时,只有else if语句为true,音乐将重新打开。或者在此示例中,您可以仅使用else进行简化:
if(parent.getSound()) parent.pauseBackMusic();
else parent.playBacMusic();
关于java - Libgdx播放/暂停音乐,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51585643/