使用libgdx设置新屏幕会导致我的游戏崩溃?

时间:2015-09-14 00:02:01

标签: java android android-studio libgdx scene2d

所以我似乎无法想象为什么设置一个新的屏幕崩溃我的游戏,我得到的日志消息似乎很直接,但我只是找不到它的根,所以我希望有人可以帮助我在这里..这是日志消息

java(1240,0x1e59cb000) malloc: *** error for object 0x7f8cf4ad2208: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

以下是调用setScreen方法的代码,我不知道我在哪里修改一个自由对象希望有人可以在这个主题上启发我

public class GameScreen implements Screen {
//..
public void updateWorld(float deltaTime){

        switch (gameState) {
            case START:
                //..
                break;

            case RUNNING:
                //..
                break;

            case GAMEOVER:
                System.out.println("called");
                //..
                fishy.setGRAVITY(-20);
                fishy.update(deltaTime);

                if (gos == null) gos = new GameOverState(game);
                gos.compareScore(curr_ig_score);
                backgroundMusic.pause();
                if (!gameOver.isPlaying()) gameOver.play();
                fishy.setMOVEMENT_X(0);

                updateGOSButtons();
                break;
            case PAUSED:
                //...
                break;
        }

        //..
    }

public void updateGOSButtons() {
            if (gos.isGoButtonClicked()) {
                gameOver.stop();
                backgroundMusic.play();
                dispose();
                game.setScreen(new GameScreen(game));
            }

            if (gos.isHomeButtonClicked()) {
                gameOver.stop();
                backgroundMusic.play();
                dispose();
                game.setScreen(new MainMenuScreen(game));
            }

            Gdx.input.setInputProcessor(gos.getStage());
    }

}

2 个答案:

答案 0 :(得分:1)

来自另一个主题:

  

正在发生的事情之一是:

     

1)你正在释放一个物体两次,

     

2)你正在释放一个从未分配的指针

     

3)你正在写一个先前指向的无效指针   一个已经被释放的物体

最好的方法是在malloc_error_break方法中放置一个断点,看看发生了什么。没有更多信息,我们无法提供帮助!

答案 1 :(得分:1)

我最近遇到了类似的问题,这是因为我在渲染周期中间更改了屏幕。发生的事情是当前的屏幕将被隐藏和处理,然后它会尝试使用舞台和其他已被处理的对象渲染它。我必须将设置屏幕方法移动到渲染调用的末尾并解决问题。