我正在讀「學習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