我正在阅读“Learning XNA 4.0”一书,我在面向对象的设计部分。我对 2 个矩形的碰撞有一个奇怪的问题。
我有一个automatedSprite 列表和一个Player 类,它们都派生自Sprite 类。在更新方法中,我正在检查播放并且 aotomatedSprite 矩形相互接触,现在当我越过列表时,我有一个名为 touch 的字符串表示碰撞。
我的问题是真正的触摸,只有当玩家精灵触摸列表中的最后一个自动精灵时才会改变。
本书提供的测试代码是Game.Exit()
在发现任何冲突时执行的。这适用于列表中的每个自动精灵,但是当我将其更改为我的简单测试时,它就像我只检查 4 个自动精灵列表中的最后一项。
这是代码:
string touching = "";
public override void Update(GameTime gameTime)
{
// TODO: Add your update code here
player.Update(gameTime, Game.Window.ClientBounds);
foreach (Sprite sprite in spriteList)
{
sprite.Update(gameTime, Game.Window.ClientBounds);
if (sprite.collisionRect.Intersects(player.collisionRect))
touching = "touching";
else
touching = "not touching";
}
base.Update(gameTime);
}
public override void Draw(GameTime gameTime)
{
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
spriteBatch.DrawString(font, touching, Vector2.Zero, Color.Red);
player.Draw(gameTime, spriteBatch);
foreach (Sprite sprite in spriteList)
{
sprite.Draw(gameTime, spriteBatch);
}
spriteBatch.End();
base.Draw(gameTime);
}
编辑 - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------ 解决方案:我在游戏开发部分问它,我得到了答案。我必须break;
在 foreach 循环中有一个,这样它就不会在发现碰撞后继续运行。