0

これは、敵が画面の下部で前後に移動する、作業中のプロジェクトのコードです。

class enemy1
{
    Texture2D texture;
    public Vector2 position;
    bool isAlive = false;
    Random rand;
    int whichSide;
    public enemy1(Texture2D texture, Vector2 position)
    {
        this.texture = texture;
        this.position = position;
    }

    public void Update()
    {
        if (isAlive)
        {
            if (whichSide == 1)
            {
                position.X += 4;

                if (position.X > 1000 + texture.Width)
                    isAlive = false;
            }
            if (whichSide == 2)
            {
                position.X -= 4;

                if (position.X < 0)
                    isAlive = false;
            }
        }
        else
        {
            rand = new Random();
            whichSide = rand.Next(1, 3);
            SetInStartPosition();
        }
    }

    private void SetInStartPosition()
    {
        isAlive = true;
        if (whichSide == 1)
            position = new Vector2(0 - texture.Width, 563 - texture.Height);
        if (whichSide == 2)
            position = new Vector2(1000 + texture.Width, 563 - texture.Height);
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, Color.White);
    }
}

今、私はいくつかの敵が行ったり来たりしたいのですが、それらは異なる位置から始まるので、画面の下部でいくつかの敵が行ったり来たりしているように見えます。最初の敵のように振る舞わないことを除いて、私は画面上に他のいくつかの敵を描くことができました。それらは、どこにも動かない画面上の写真です。だから今私が持っているのは、ヒーローが動き回っていて、画面の下部に1人の敵がいて、画面の上部に座っている他の5人の敵が何もしていないことだけです。同じ動作をするクラスから新しいスプライトをいつでも簡単に追加し、それらを格納するための10億の変数を作成しないようにするにはどうすればよいですか?

4

1 に答える 1

0

一般に、適切なクラス内に同様のロジックを含めることをお勧めします。したがって、すべてSpriteが同じことを行う場合は、移動コードをパブリック メソッド内に配置し、そのメソッド内でそのメソッドを呼び出すだけで済みUpdate()ます。

したがって、Sprite クラスが次のようになっているとします。

public class Sprite
{
    private Vector2 Position; 
    public Sprite(Texture2D texture, Vector2 position)
    {
       Position = position; 
    }

    //then just add this
    public void MoveSprite(int amount)
    {
        position.X += amount; 
    }
}

さて、オブジェクト名「スプライト」は非常に一般的なもので、ゲームには多くの「スプライト」が含まれる可能性が高くなります。

したがって、適切な OOP プラクティスに従い、この特定のスプライトに別の名前を付けて、現在見ているこのクラスから派生させたいと思うでしょう。(しかし、私はあなたのためにデザインの決定をするつもりはありません)

これは漠然とした質問でしたが、これが私の最善の答えです。

于 2013-01-13T06:00:38.050 に答える