首页 > 解决方案 > 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()之间循环。

谢谢你。

标签: javaandroidlibgdxbackground-music

解决方案


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

推荐阅读