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);

これは 2 行目を指しています。このコードを完全に削除したため、ゲームをプレイしてもクラッシュしなくなりましたが、画面に触れて準備ができていることを確認し、ゲームの状態を「準備完了」に変更すると、明らかにクラッシュします。

エラー ログには次のように表示されます。

  • 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): 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コード内のその行に到達したときでなければなりません。コードがその行に到達する前に、何らかの値に初期化されていることを確認してください。

NullPointerExceptionnull であるオブジェクトのメンバーにアクセスしたり、メソッドを呼び出そうとしたときに発生します (つまり、null ポインターを逆参照しようとしています)。スタック トレースでそれを確認するたびに、その行を見つけて、その行のどのオブジェクトが null になる可能性があるかを調べます。

于 2013-07-29T15:50:45.677 に答える