0

これが私の最初の質問で、数日前にC#でコーディングを始めたばかりです。愚かなことをしている場合は、親切にしてください。問題は、xnaで小さな2Dゲームを書きたいので、テクスチャ付きの32x32 pxのボックスを作成したので、それがプレーヤーになるはずです。矢印キーを使用して、次のようなプレーヤーのクラスを作成することで、プレーヤーを移動できます。

namespace MyGame
{
    class Player
    {
        public Texture2D Textur;
        public Vector2 Position { get; set; }
    }
}

その後、

KeyboardState keyboard = Keyboard.GetState();
if (keyboard.IsKeyDown(Keys.Right)) player.Position += new Vector(5,0);
//and so on

ここで、5はピクセル数であり、プレーヤーは1回のキーストロークで移動します。私がやろうとしているのは、このようなものを書くことです

class Player
{
    public Texture2D Textur;
    public Vector2 Position { get; set; }
    public Vector2 UpperRightCorner = new Vector2(Position.X + 32, Position.Y);
}

しかし、明らかにそれは機能しません。getに関するmsdnのドキュメントを読んだとしても。セットする; それがどのように機能するのか、私にはよくわかりません。衝突メソッドを作成するには、コーナー、より正確にはコーナーの隣のピクセルが必要です。この方法では、矢印キーを押すたびに、プレーヤーの前にあるレベルブロックの種類を確認してから、速度応答を調整する必要があります。固いブロック(壁など)がある場合は、移動を0に設定します。

任意のアイデア、プレーヤークラスでこのコーナーのものをどのように書くことができますか?プレーヤーをインスタンス化した後、メインクラスで呼び出すことができますが、プレーヤークラスに入れたいと思います。

4

3 に答える 3

2

ポジションがまだ作成されていないため、機能しません。

public Player()たとえば、Playerコンストラクターでは、Positionをnew Vector2最初に設定する必要があります。例えば:

public Player()
{
    Position = new Vector2(0,0);
    UpperRightCorner = new Vector2(Position.X + 32, Position.Y);
}
于 2013-01-23T15:01:39.607 に答える
1

UpperRightCornerインスタンス化されるときに値を割り当てます。この値は変更されません。UpperRightCornerこれは、アクセスされるたびに再計算するためにゲッターで書き直すことができます。例:

public Vector2 UpperRightCorner
{
    get
    {
        return new Vector2(Position.X + 32, Position.Y);
    }
}
于 2013-01-23T15:11:36.677 に答える
1

ぎのさじの返事はあなたが求めていたものを与えるはずです。わずかな変更を加えるだけで、選択した任意のサイズのテクスチャを自動的に処理することもできます。

public Vector2 UpperRightCorner {
    get {
        return new Vector2(Position.X + Textur.Width, Position.Y);
    }
}
于 2013-01-25T21:19:52.330 に答える