我正在尝试创建一个游戏,其中一些太空飞船从顶部开始,当一个人到达屏幕边缘时单独向下工作。
问题是我不确定如何在每个实例中执行此操作。
移动它们的部分是:
Ticks = Ticks + gameTime.ElapsedGameTime.TotalMilliseconds;
if (Ticks > 50)
{
for (int Count = 0; Count < 11; Count++)
{
if (Invaders[Count].GetXPos() < 96)
{
Invaders[Count].setXPos(96);
Invaders[Count].setYPos(150);
}
else if (Invaders[Count].GetXPos() > 924)
{
Invaders[Count].setXPos(924);
Invaders[Count].setYPos(150);
}
if (Invaders[Count].GetYPos()%150 == 0)
{
Invaders[Count].MoveHorizontal(2);
alienDirection *= -1;
}
else
{
Invaders[Count].MoveHorizontal(alienSpeed * alienDirection);
}
// Invaders[Count].MoveHorizontal(alienSpeed * alienDirection);
}
Ticks = 0;
}
类入侵者:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace SpaceInvader
{
class Invader
{
Vector2 alienPos;
public Invader()
{
alienPos = new Vector2();
alienPos.X = 0;
alienPos.Y = 0;
}
public void MoveHorizontal(int amount)
{
alienPos.X = alienPos.X + amount;
}
public void MoveVertical(int amount)
{
alienPos.Y = alienPos.Y + amount;
}
public void setXPos(int pos)
{
alienPos.X = pos;
}
public int GetXPos()
{
return (int)alienPos.X;
}
public void setYPos(int pos)
{
alienPos.Y = pos;
}
public int GetYPos()
{
return (int)alienPos.Y;
}
public Vector2 GetPos()
{
return alienPos;
}
}
}
有没有办法让Invader完全自包含,并在创建和给定位置移动和重绘(所以我可以忘记移动它并在主程序中重绘它,所有我不得不担心的是碰撞后来检测等?)