0

アクセサーを使用する必要がありますか?そうでない場合、どうすればこれを行うことができますか?

の下のゲームにテクスチャをロードしようとしていますLoadContent()。次に、これをに渡してUpdate()、別のクラスの衝突検出の目的で使用できるようにします。

これが私のコードです:

Game1.cs

public class GetTileType
{
    public Texture2D dirt;
    public Texture2D Dirt
    {
        get
        {
            return dirt;
        }

        set
        {
            dirt = value;
        }
    }
}

public class Main : Game
{
GetTileType getTileType = new GetTileType();

protected override void LoadContent()
{

    getTileType.Dirt = Content.Load<Texture2D>("Dirt");
}

protected override void Update(GameTime gameTime)
{
    Texture2D dirt = getTileType.Dirt;

    player.GetTileType(dirt);

    base.Update(gameTime);
}

Player.cs(今のところ衝突情報を保持しています)

public void GetTileType(Texture2D groundTexture)
{
    Tile tile = (Tile)Main.currentLevel.GetTile(0, 0);

    Texture2D texture = tile.Texture;

    if (texture == groundTexture)
    {
        // Write code to handle what to do if the player tries to enter the ground.
    }
}
}

にはもっとありますがLoadContent()、この問題とは無関係です。についても同じですUpdate()。デバッグでplayer.GetTileType(dirt);は、nullとして表示されます。私が間違えなければ、それは「汚れた」はずです。

私はこれについてすべて間違っていると感じていますが、他の方法は考えられません。私が試した他のすべては行き止まりになりました。

ゲームを開始すると、ロードされてからハングします。それでは、タスクマネージャーから停止する必要があります。

誰かが私が間違っていることを教えてもらえますか?どうもありがとうございます。

4

1 に答える 1

0

コードの問題は、常に新しいインスタンスを作成していることですGetTileType

1 つのインスタンスを作成し(LoadContentそれを A と呼びましょうDirt)、そのインスタンスにプロパティを設定します。
ただし、そのインスタンスをどこにも保存しません。メソッドが終了した後、 A はスコープ外になり、最終的にはガベージ コレクトされます。

Update新しいインスタンス B を作成し、そこからプロパティの値を取得しますDirt
これは新しく作成されたインスタンスであるため、これはnullです。

于 2012-12-13T11:10:08.980 に答える