猿问

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



森林海
浏览 192回答 2
2回答

摇曳的蔷薇

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

Helenr

您可以使用InputProcesser来监听触摸事件。使用它,您可以收听仅在用户按下您的按钮时调用一次的触摸事件,这与您的示例中以恒定循环运行不同。您可以使用touchDown方法来做到这一点
随时随地看视频慕课网APP

相关分类

Java
我要回答