Libgdx播放/暂停音乐

时间:2018-07-30 00:27:47

标签: java android libgdx background-music

我是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 个答案:

答案 0 :(得分: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()为true,则else if语句将被跳过,而isSound仍为false。下次单击时,只有else if语句为true,音乐将重新打开。

或者在此示例中,您可以仅使用else来简化:

if(parent.getSound()) parent.pauseBackMusic();
else parent.playBacMusic();

答案 1 :(得分:0)

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

您可以使用touchDown方法