Libgdx 播放/暂停音乐

Posted

技术标签:

【中文标题】Libgdx 播放/暂停音乐【英文标题】:Libgdx play/pause music 【发布时间】:2018-07-30 00:27:47 【问题描述】:

我是 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() 之间循环。

谢谢。

【问题讨论】:

你的命名没有多大意义。 #getSound 应该是#isSound。此外,布尔值应替换为原始等效值。你的 if 语句也可以用 else 来简化 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于Libgdx 播放/暂停音乐的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止音乐曲目在 Libgdx 中循环播放

无法使用 LibGDX 在 Android 上播放 2 个音乐实例

如何在其他视图中使用 Swift 中的 AVPlayer 暂停和播放音乐

IOS如何在后台播放音乐声音并暂停当前播放的音乐应用程序

如何检查音频队列中的音乐是不是正在播放或暂停

暂停和恢复背景音乐,而其他播放之间