現在、libgdxというフレームワークを使用してゲームプログラミングを学習しています。これにより、ユーザーは、デスクトップのJava仮想マシンとAndroid携帯電話の両方で簡単に実行できるプログラムを作成できます。私は画面に文字を表示し、キーボードで前後に移動させる基本的なプログラムを作ろうとしています。私は、Assets
という3つのクラスを作成しました。ファイルをメモリに読み込んで、テクスチャとアニメーションに変換します。InputHandler
と呼ばれ、アニメーションや動きの方向などを変更してキー入力に応答します。FightView
本質的にすべてのレンダリングが行われる場所。 InputHandler
は、input = new InputHandler(anim, frame);
のコマンドでFightView
クラスから呼び出されます。 InputHandler
のコンストラクタは次のようになります。Android Game Dev - 新しいオブジェクトを宣言した後のNullPointerException
public InputHandler(Animation animation, TextureRegion region){
Assets.load(); //loads textures from files into memory and creates animations from them
animation = Assets.playStance; //set initial animation to be used
region = animation.getKeyFrame(0, true); //make TextureRegion equal to first frame in animation
}
を今、私が起こるにしたいと、そのよう私がいた場合はアニメーションとTextureRegionは、例えば、上記引用された値に設定されているコンストラクターに渡されるだけであることですinput
が宣言された後にFightView
クラスのregion
と言えば、animation.getKeyFrame(0, true);
と設定されます。ジャワの私の限られた経験から、これは私が起こるはずと信じて何ですが、私は以下のコードの2行目を指して、コンパイル時にNullPointerExceptionが取得:
input = new InputHandler(anim, frame);
x = centreX - (frame.getRegionWidth()/2);
明らかに、frame
も渡された後、まだnullです(コンストラクタの3行目に示されているように)コンストラクタを介して値を代入する必要があります。コンストラクタに渡される前に、両方とも実際にnullであることに注意してください。FightView
クラスでフィールドのデータを与える必要がなくクラスを作成しようとしています。
助けてください。これは間違った方法かもしれません。私がしようとしているのは、初期化時にAnimation
とTextureRegion
をデータでロードするオブジェクトを作成することです。
助けてくれてありがとう、私はあなたが言ったことをやったと、今のコードは次のようになります。 \t \t入力=新しいInputHandler(); \t \t frame = input.frame; \t \t x = centreX - (frame.getRegionWidth()/ 2); また、アニメーションなどを変更するupdate()というInputHandlerのメソッドもあります。ボタンが押されたとき。これらの変更を行うには、そのメソッドを呼び出した後に 'frame = input.frame'行を書く必要がありますか? – semiserious