【发布时间】:2014-01-16 19:15:51
【问题描述】:
好的,所以我一直在寻找几个小时没有任何结果,真的希望你能帮助我。我在让交叉点工作时遇到了一些麻烦。当我的课程发生冲突时什么都没有发生,这可能是我失明但对 XNA 来说真的很陌生。我创建了一个 Shoot-Em-Up 游戏,我希望游戏在玩家控制的航天飞机与敌人相撞时结束。
使用类; Game1.cs、Player.cs 和 Enemy.cs。请注意,我只粘贴了我认为解决此问题所必需的信息。
Game1.cs
protected override void LoadContent()
{
shuttle = new Player(Content.Load<Texture2D>(@"spaceship"), new Vector2(300, 400), new Vector2(24, 24), spriteBatch);
}
protected override void Update(GameTime gameTime)
{
if (random.Next(0, 70) < droprate)
{
int posX = random.Next(20, 580);
enemyList.Add(new Enemy(Content.Load<Texture2D>(@"enemy1"), new Vector2(posX, -50), new Vector2(24, 24), spriteBatch));
droprate += 0.10;
}
foreach (Enemy e in enemyList)
{
if (shuttle.rectangle.Intersects(e.rectangle))
Exit();
}
}
播放器.cs
public Rectangle rectangle;
public Player(Texture2D texture, Vector2 initialPos, Vector2 origin, SpriteBatch spriteBatch) : base(texture, initialPos, origin, spriteBatch)
{
this.rectangle = new Rectangle(Convert.ToInt32(initialPos.X), Convert.ToInt32(initialPos.Y), 48, 48);
}
public override void Update(GameTime gameTime)
{
KeyboardState keyboardState = Keyboard.GetState();
if (keyboardState.IsKeyDown(Keys.Right))
{
initialPos.X += 9;
}
if (keyboardState.IsKeyDown(Keys.Left))
{
initialPos.X -= 9;
}
if (keyboardState.IsKeyDown(Keys.Up))
{
initialPos.Y -= 5;
}
if (keyboardState.IsKeyDown(Keys.Down))
{
initialPos.Y += 5;
}
initialPos.X = MathHelper.Clamp(initialPos.X, 18, screenWidth - 18);
initialPos.Y = MathHelper.Clamp(initialPos.Y, 24, screenHeight - 24);
base.Update(gameTime);
}
敌人.cs
public Rectangle rectangle;
public Enemy(Texture2D texture, Vector2 initialPos, Vector2 origin, SpriteBatch spriteBatch) : base(texture, initialPos, origin, spriteBatch)
{
this.rectangle = new Rectangle(Convert.ToInt32(initialPos.X), Convert.ToInt32(initialPos.Y), 48, 48);
}
public override void Update(GameTime gameTime)
{
initialPos.Y += 3.5f;
if (initialPos.X < 300)
initialPos.X += 0.41f;
if (initialPos.X > 300)
initialPos.X -= 0.41f;
}
【问题讨论】:
-
玩家或敌人会移动吗?在最初创建它们之后,您似乎从未更新它们的碰撞边界。
-
玩家/穿梭机由我控制,而敌方飞船不断向屏幕底部移动。
-
您是否曾经为您的
Enemy和Player对象更新rectangle的值?您正确使用了Intersects()方法,这意味着您提供的数据是错误的。 -
这个我不确定。我可以发布我的更新功能,也许你会更好地理解。
-
您是否使用过调试器?可能有助于查看您是否正在使用您认为自己正在使用的数据
标签: c# class vector xna rectangles