java - Libgdx 播放/暂停音乐
问题描述
我是 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()
为真,则 else if 语句将被跳过并且isSound
仍然为假。并且通过下一次单击,只有 else if 语句为真,音乐将重新打开。
或者在此示例中,您可以通过仅使用 else 来简化:
if(parent.getSound()) parent.pauseBackMusic();
else parent.playBacMusic();
推荐阅读
- java - 枚举中的方法参考与泛型
- android - 在 Android Studio 中使用 SQLite 的 RecyclerView
- java - OnClickListener 错误:“[..] 在空对象引用上调用虚拟方法 [...]”,尽管声明了字符串
- reactjs - JSON 文件中的数据,React 表跨域错误
- python - 为什么特定算法通过 ctypes 需要更长的时间?
- assembly - 组装中 HiFive 1 板的稳定输入读数问题
- python - 使用 FieldMask 时,HTTP PATCH 应如何传达资源属性的删除
- c - 如果两个指针指向同一个内存地址,是只需要使用free(ptr)一次还是两次?
- sql - 如何在对齐行时一次从两个不同的表中提取不同的计数
- sparql - 在 SPARQL 中查找常见的超类