1

我在这里遇到问题,不太确定问题是什么,做了一些谷歌搜索,找不到太多,但我怀疑这与我的图像被获取的方式或污渍的随机放置方式有关正在计算,有时游戏会启动,但我最多只能达到 2-3 个污点,然后当我进入与下一个相同的网格时,它通常会崩溃。这让我怀疑它也可能是计算蛇头何时与污渍在同一网格上的代码......很多事情我什至不知道什么是坏的,什么不是:D,调试器总是指向这个区域,即 GameScreen.java 的第 151 > 158 行:

    Image stainImage = null;
    if (stain.type == Stain.TYPE_1)
        stainImage = Assets.stain1;
    if (stain.type == Stain.TYPE_2)
        stainImage = Assets.stain2;
    if (stain.type == Stain.TYPE_3)
        stainImage = Assets.stain3;
    **int x = stain.x * 32;**
    int y = stain.y * 32;
    g.drawImage(stainImage, x, y);

它指向第二行,我已经完全删除了这段代码,当我点击播放时游戏不再崩溃,但是当我触摸屏幕确认我准备好并将游戏状态更改为“准备好”时,它显然崩溃了。

错误日志显示:

  • 07-29 16:18:08.516:E/AndroidRuntime(5102):致命异常:线程 12
  • 07-29 16:18:08.516: E/AndroidRuntime(5102): java.lang.NullPointerException
  • 07-29 16:18:08.516: E/AndroidRuntime(5102): at com.stephengibson.mrnom.GameScreen.drawWorld(GameScreen.java:158)
  • 07-29 16:18:08.516: E/AndroidRuntime(5102): 在 com.stephengibson.mrnom.GameScreen.present(GameScreen.java:130)
  • 07-29 16:18:08.516: E/AndroidRuntime(5102): 在

  • com.stephengibson.framework.implementation.AndroidFastRenderView.run(AndroidFastRenderView.java:46)

  • 07-29 16:18:08.516: E/AndroidRuntime(5102): 在 java.lang.Thread.run(Thread.java:1019)

我检查了错误报告所抱怨的行,GameScren 第 130 行如下所示:

    drawWorld(world);
    if (state == GameState.Ready)
        drawReadyUI();
    if (state == GameState.Running)
        drawRunningUI();
    if (state == GameState.Paused)
        drawPausedUI();
    if (state == GameState.GameOver)
        drawGameOverUI();

AndroidFastRenderview 第 46 行如下所示:

    game.getCurrentScreen().present(deltaTime);

我希望我已经提供了足够的信息,我已经很好地遵循了这本书,并且花了 3-4 小时的大部分时间来回反复检查所有代码,添加东西并删除部分以尝试找出问题.

抱歉问了这么长的问题哈哈,谢谢。

4

1 回答 1

1

stain必须是当您到达代码中的那一行时。确保在您的代码到达该行之前将其初始化为某个值。

NullPointerException当您尝试访问一个为 null 的对象的成员或调用该对象的方法时会发生这种情况(这意味着您正在尝试取消引用一个空指针)。每当您在堆栈跟踪中看到它时,找到该行并找出该行上的哪个对象可能为空。

于 2013-07-29T15:50:45.677 回答