テラリアのような 2D 横スクロールのゲームを作っています。私のゲームでは、オフセットがXOffありYOff、 、およびそれらが地形を移動します。私は自分のキャラクターのためのメソッドも持っていますmove()、そしてそれはこれだけです:
public void move() {
if (!ableToMove) //makes sure you can move
return;
// x += moveX; these 2 methods work, but x and y are just my player coords.
// y += moveY;
core.setYOff(1); //core is my main class, where the global variables are stored
}
コメント ラベルと各変数の説明。したがって、setYOff(1) は次のYOffように設定します。
private void setYOff(int i){
YOff += i;
}
現在、メソッドにアクセスする方法は 1 つしかありませんmove。と呼ばれるスレッドでは、 と と呼ばれる別のメソッドPlayerThreadへの定数呼び出しがありますが、これは実際にはこの質問とは関係ありません。それは にあります。move()applyGravity()PlayerThread
ここに私が抱えている問題があります... を呼び出すとsetYOff()、次のエラーが表示されます。
Exception in thread "player Thread" java.lang.NullPointerException
at main.Player.move(Player.java:33)
at main.PlayerThread.run(PlayerThread.java:24)
at java.lang.Thread.run(Unknown Source)
setYOff()これは、メソッドでメソッドを呼び出すと、機能しないことを示していmove()ます。Yオフセットをスレッド自体に設定する呼び出しをテストして移動しようとしましたが、同じエラーが発生しました...次に、に移動しようとしましたがRefreshThread、興味深いことに、動作しました...全体を移動しました20 ミリ秒ごとに 1 ピクセルずつ下にマップします...その理由がわかりません! これを機能させない move メソッドの何が問題なPlayerThreadのですか。私の違いは何RefreshThreadですか?各スレッドの呼び出し、作成などを含むすべてのコード全体が必要な場合は、それを提供できますが、それが必要になるかどうかはわかりません...他に何をする必要がありますか? 前もって感謝します!
編集:PlayerThread呼び出しをコメントアウトしmove()、y オフセットを調整するだけで試してみましたが、うまくいきました! それは move メソッドに関係していますが、なぜですか?
前の編集への修正:さらにテストして、move()呼び出しをスレッドに戻し、その中に保持しsetYOff(1)ましたが、それでも機能しましたが、移動メソッド自体の中からではありません...