所以我必须为学校开发一款 XNA 游戏,我认为制作 Space Invaders 是件好事。但现在我遇到了一个问题。我有一个List
来自另一个班级的“外星人”。每秒它向右移动 20 像素,我希望它在触摸屏幕右侧时下降(不是问题)。但我希望它一碰到墙就向相反的方向(向左)移动。问题就在这里。一旦它接触到墙壁,它仍然移动 20px 一次,改变方向,向后移动 20px 并再次改变方向。这不断重复。那么问题出在哪里。我认为它必须更早地检查是否有一个外星人触摸了屏幕,但不知道如何做到这一点,并认为也许你们中的一个可以帮助我,因为这非常令人沮丧!
我包括了更新方法
if (xPos % step == 0)
{
if (!isDescending)
{
for (int k = 0; k < sprites.Count; k++)
{
Sprite sprite = sprites[k];
if (touchedRight) sprite.position.X += step;
else sprite.position.X -= step;
}
for (int k = 0; k < sprites.Count; k++)
{
Sprite sprite = sprites[k];
bool hitLeft = sprite.position.X == 0;
bool hitRight = sprite.rect.Right == screenWidth;
if ((hitLeft) || (hitRight))
{
touchedRight = !touchedRight;
isDescending = true;
}
}
}
else
{
isDescending = false;
for (int k = 0; k < sprites.Count; k++)
{
sprites[k].position.Y += sprites[k].rect.Height;
}
}
}
// CheckCollision(alienBounds, k-1);
// sprite.rect = new Rectangle((int)sprite.position.X, (int)sprite.position.Y, 20, 20);
// alienBounds = sprite.rect;
xPos += 1;