0

libgdxというフレームワークを使ってゲームプログラミングを学んでいます。ユーザーは、デスクトップ上の Java 仮想マシンと Android 携帯電話の両方で簡単に実行できるプログラムを作成できます。画面に文字を表示し、キーボードで前後に移動できる基本的なプログラムを作成しようとしています。私は 3 つのクラスを作成しました -Assetsファイルをメモリにロードし、それらをテクスチャとアニメーションに変換すると呼ばれるクラス、アニメーションInputHandlerや移動方向などを変更することによってキー入力に応答すると呼ばれるクラス、および と呼ばれるクラスFightViewです。レンダリングが行われます。は、通常のコマンドでクラスInputHandlerから呼び出されます。のコンストラクタは次のようになります。FightViewinput = new InputHandler(anim, frame);InputHandler

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

}

さて、私がやりたいことは、コンストラクターに渡された Animation と TextureRegion が上記の値に設定されていることです。たとえば、宣言された後にクラスで言及regionした場合、次のように設定されます。 . Java の私の限られた経験から、これは起こるべきだと私が信じていることですが、コンパイル時に以下のコードの 2 行目を指す NullPointerException が発生します。FightViewinputanimation.getKeyFrame(0, true);

    input = new InputHandler(anim, frame);
    x = centreX - (frame.getRegionWidth() / 2);

明らかに、frame(コンストラクターの 3 行目でわかるように) 値を割り当てる必要があるコンストラクターを通過した後でも、まだ null です。コンストラクターに渡される前に、それらは実際には両方とも null であることに注意してください。クラスで必要なくフィールド データを提供するクラスを作成しようとしていますFightView

どんな助けでも感謝します。これは間違った方法である可能性があります。私がしようとしているのは、初期化時にAnimationandTextureRegionにデータをロードするオブジェクトを作成することです。

4

1 に答える 1

1

あなたが抱えている問題は、基本的な Java の概念の誤解によるものです。Java は、パラメータを参照ではなく値で渡します。あなたが書いたものは、あなたが期待するようには決して機能しません。

まず、より単純な問題に取り組むか、Java の基本的な概念とオブジェクトの概念のいくつかを強化するための寄り道をすることをお勧めします。

第二に、あなたが望むものを達成するための簡単な答えがあります.

Animation と TextureRegion を保持するメンバーを InputHandler クラスに追加します。コンストラクター (パラメーターをとらない) では、値をメンバー変数に割り当てることを除いて、行ったのと同じように値を割り当てます。

class InputHandler {

    public Animation animation;
    public TextureRegion region;

    public InputHandler() {

        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

    }
}

InputHandler を構築した後、そのメンバー (この場合はフレーム) を参照して、正しい値を確認できます。

input = new InputHandler();
x = centreX - (input.frame.getRegionWidth() / 2);
于 2011-07-27T23:38:14.937 に答える