为了账号安全,请及时绑定邮箱和手机立即绑定

Libgdx 播放/暂停音乐

Libgdx 播放/暂停音乐

森林海 2021-06-14 14:15:14
我是 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()之间循环。
查看完整描述

2 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

你的问题是你使用了两个 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();


查看完整回答
反对 回复 2021-06-17
?
Helenr

TA贡献1780条经验 获得超4个赞

您可以使用InputProcesser来监听触摸事件。使用它,您可以收听仅在用户按下您的按钮时调用一次的触摸事件,这与您的示例中以恒定循环运行不同。

您可以使用touchDown方法来做到这一点


查看完整回答
反对 回复 2021-06-17
  • 2 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信