这是我正在进行的项目的代码,敌人在屏幕底部来回移动。
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);
}
}
现在我希望有一些敌人来回走动,但是他们从不同的位置开始,所以看起来有几个敌人在屏幕的底部来回走动。我设法在屏幕上绘制了一些其他敌人,除了他们不像第一个敌人。它们只是屏幕上没有移动的图片。所以我现在所拥有的只是英雄在屏幕底部移动,一个敌人,以及坐在屏幕顶部的其他5个敌人什么都不做。我如何在任何时候从具有相同行为的类中轻松添加新的精灵,而不是将十亿个变量存储在其中?
答案 0 :(得分: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;
}
}
现在,对象名称“Sprite”非常通用,你的游戏很可能会有很多“Sprite”。
所以你会想要遵循优秀的OOP实践,并且可能将这个特定的sprite命名为不同的东西,然后从我们正在查看的这个类派生出来。 (但我不打算为你做出设计决定)
这是一个模糊的问题,但这是我最好的答案。