我正在读“学习XNA 4.0”一书,而且我在面向对象的设计部分。我有一个奇怪的问题与两个矩形的碰撞。XNA碰撞怪异行为
我有一个从类Sprite派生的automateSprite和Player类的列表。 在更新方法中,我正在检查播放,并且aotomatedSprite矩形相互接触,现在,当我查看列表时,我有一个名为“碰触”的字符串,表示碰撞。
我的问题是可触摸的触摸,只有当玩家Sprite触摸列表中的最后一个automateSprite时才会改变。
本书为测试提供的代码是Game.Exit()
,如果发现任何碰撞。 这对列表中的每个automatedSprite都有效,但是当我将其更改为我的简单测试时,它的行为就像我只检查4个automatedSprite列表中的最后一个项目。
这里是代码:
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);
}
编辑--------------------------------- ---------------------------------------- 解决方案: 我在游戏中问它开发部分,我得到了答案。 我不得不在foreach循环中有一个break;
,所以在发现碰撞后它不会继续。
谢谢,但它仍然给了我同样的结果,我在游戏开发中问及它,并告诉我在有任何碰撞的时候使用破解。 – samy 2012-04-29 14:43:09
好,纠正它。无论如何,这也可以起作用。 – Matzi 2012-04-29 14:51:59