Gestaltung Von Spiel-Objekte

Ich habe vor kurzem angefangen ein kleines Spiel für mein eigenes Vergnügen, mit Microsoft XNA und C#. Meine Frage ist in Bezug auf die Gestaltung einer Spiel-Objekt und die Objekte, die es übernimmt. Ich werde bestimmen, ein Spiel-Objekt als etwas, das sich auf dem Bildschirm gerendert. Also, für dieses, ich entschied mich für ein Basis-Klasse, die alle anderen Objekte, die gerendert werden müssen, Erben, genannt GameObject. Der untenstehende code ist die Klasse, die ich gemacht:

class GameObject
{
    private Model model = null;
    private float scale = 1f;
    private Vector3 position = Vector3.Zero;
    private Vector3 rotation = Vector3.Zero;
    private Vector3 velocity = Vector3.Zero;
    private bool alive = false;
    protected ContentManager content;

    #region Constructors
    public GameObject(ContentManager content, string modelResource)
    {
        this.content = content;
        model = content.Load<Model>(modelResource);
    }
    public GameObject(ContentManager content, string modelResource, bool alive)
        : this(content, modelResource)
    {
        this.alive = alive;
    }
    public GameObject(ContentManager content, string modelResource, bool alive, float scale)
        : this(content, modelResource, alive)
    {
        this.scale = scale;
    }
    public GameObject(ContentManager content, string modelResource, bool alive, float scale, Vector3 position)
        : this(content, modelResource, alive, scale)
    {
        this.position = position;
    }
    public GameObject(ContentManager content, string modelResource, bool alive, float scale, Vector3 position, Vector3 rotation)
        : this(content, modelResource, alive, scale, position)
    {
        this.rotation = rotation;
    }
    public GameObject(ContentManager content, string modelResource, bool alive, float scale, Vector3 position, Vector3 rotation, Vector3 velocity)
        : this(content, modelResource, alive, scale, position, rotation)
    {
        this.velocity = velocity;
    }
    #endregion
}

Habe ich ausgelassen zusätzliche Methoden, die Dinge tun wie drehen, verschieben, und ziehen Sie das Objekt. Nun, wenn ich wollte zu schaffen ein anderes Objekt, wie ein Schiff, würde ich erstellen Sie eine Schiff-Klasse GameObject Erben würde. Beispiel-code unten:

class Ship : GameObject
{
    private int num_missiles = 20; //the number of missiles this ship can have alive at any given time
    private Missile[] missiles;
    private float max_missile_distance = 3000f; //max distance a missile can be from the ship before it dies

    #region Constructors
    public Ship(ContentManager content, string modelResource)
        : base(content, modelResource)
    {
        InitShip();
    }
    public Ship(ContentManager content, string modelResource , bool alive)
        : base(content, modelResource, alive)
    {
        InitShip();
    }
    public Ship(ContentManager content, string modelResource, bool alive, float scale)
        : base(content, modelResource, alive, scale)
    {
        InitShip();
    }
    public Ship(ContentManager content, string modelResource, bool alive, float scale, Vector3 position)
        : base(content, modelResource, alive, scale, position)
    {
        InitShip();
    }
    public Ship(ContentManager content, string modelResource, bool alive, float scale, Vector3 position, Vector3 rotation)
        : base(content, modelResource, alive, scale, position, rotation)
    {
        InitShip();
    }
    public Ship(ContentManager content, string modelResource, bool alive, float scale, Vector3 position, Vector3 rotation, Vector3 velocity)
        : base(content, modelResource, alive, scale, position, rotation, velocity)
    {
        InitShip();
    }
    #endregion
}

Wieder, ich habe Links jede zusätzliche Schiff-spezifische Methoden, wie das abfeuern einer Rakete. Glaubst du, dass diese Art von design ist gut oder sollte es sich irgendwie verbessert oder vollkommen verändert? Es scheint, wie die Konstruktoren für Unterklassen, die unordentlich ist, aber vielleicht ist das auch der einzige Weg, es zu tun. Ich habe so etwas noch nie getan und ich wundere mich, wenn ich bin Weg von der Spur.


Danke an alle, die linken eine Antwort. Sie waren alle sehr hilfreich. Es scheint ein allgemeiner Konsens darüber, dass eine änderung es um die Verwendung eines MVC-Muster am besten wäre. Ich werde schauen weiter in, wie genau das zu tun. Ich werde auch das entfernen die meisten der Konstruktoren und genau einen Konstruktor, weil alle Argumente, die nach modelResource sind nicht notwendig, um das Objekt zu erstellen, und Sie können alle geändert werden später durch Methodenaufrufe.

InformationsquelleAutor Kobol | 2008-10-07
Schreibe einen Kommentar