1

XNAを使用してゲームを作成しているので、すべての敵を「baseEnemy.cs」という1つの基本クラスから拡張してもらいたいと思います。たとえば、ゾンビに「zombie.cs」というクラスを持たせたいのですが、「baseEnemy.cs」をエンテンドさせます。

私はそれが次のようにレイアウトされると言われたことを覚えていると思います:

class zombie : baseEnemy
{

}

しかし、get{}とset{}を使用すると、baseEnemy.csの一部として存在するzombies.csの現在の変数の値を変更するのに役立つと思います...それが理にかなっている場合はどうでしょうか。get{}とset{}の使用法はわかりませんが、他の言語(minecraftのコードなど)で見たことがありますが、それらの動作は似ていると思います。

だから、私が敵の速度のためにフロートを持っているとしましょう...私はすべての敵が同じ速度で動くことを望まない(ゾンビは低速でなければならないなど)。baseEnemy.csから速度を取得し、それをzombie.csの速度として設定するにはどうすればよいですか。

または、baseEnemy.csで変数を公開する方がよいでしょうか?

上記があまり意味をなさない場合は申し訳ありませんが、私はXNAや使用されている用語の経験があまりないので、おそらく円を描いて回っているように聞こえます:S

4

1 に答える 1

2

いわゆる抽象メソッドまたは抽象プロパティを探しています。

abstract class Enemy
{
    public abstract float GetSpeed();
}

class Zombie : Enemy
{
    public override float GetSpeed()
    {
        return 10;
    }
}

abstractクラス名とメソッド名の前にあるキーワードに注意してください。子クラスは、それ自体が抽象でない場合、すべての抽象メンバーを実装する必要があります。抽象メンバーが実装されている場合、overrideキーワードを使用する必要があります。

get setあなたが記述している構文はプロパティと呼ばれます。これは、フィールドの getter および/または setter を編成し、それらを 1 つのブロックに配置する特別な C# 構造です。プロパティを使用した上記と同じ例:

abstract class Enemy
{
    public abstract float Speed { get; }
}

class Zombie : Enemy
{
    public override float Speed
    {
        get { return 10; }
    }
}
于 2013-03-06T14:01:06.920 に答える