テラリアのような 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)
ましたが、それでも機能しましたが、移動メソッド自体の中からではありません...