Libgdx play/pause 音乐
Libgdx play/pause music
我是 LibGdx 的新手,实际上我正在为 Android 设备创建一个简单的 Libgdx 游戏。
我在 LibGdx 中的 play/pause 音乐遇到问题,这是简化的代码。
//...
@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() 之间循环。
谢谢。
您可以使用 InputProcesser 来监听触摸事件。使用它,您可以收听一个触摸事件,该事件仅在用户按下您的按钮时调用一次,这与您的示例中的 运行 不同。
您可以使用 touchDown 方法
你的问题是你使用了两个 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()
为真,则将跳过 else if 语句,并且 isSound
仍然为假。并且在下一次单击时只有 else if 语句为真并且音乐将重新打开。
或者在此示例中,您可以仅使用 else 来简化:
if(parent.getSound()) parent.pauseBackMusic();
else parent.playBacMusic();
我是 LibGdx 的新手,实际上我正在为 Android 设备创建一个简单的 Libgdx 游戏。
我在 LibGdx 中的 play/pause 音乐遇到问题,这是简化的代码。
//...
@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() 之间循环。
谢谢。
您可以使用 InputProcesser 来监听触摸事件。使用它,您可以收听一个触摸事件,该事件仅在用户按下您的按钮时调用一次,这与您的示例中的 运行 不同。
您可以使用 touchDown 方法
你的问题是你使用了两个 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()
为真,则将跳过 else if 语句,并且 isSound
仍然为假。并且在下一次单击时只有 else if 语句为真并且音乐将重新打开。
或者在此示例中,您可以仅使用 else 来简化:
if(parent.getSound()) parent.pauseBackMusic();
else parent.playBacMusic();