私は「Learning XNA 4.0」という本を読んでいますが、私はオブジェクト指向の設計部分です。私は2つの長方形の衝突に奇妙な問題を抱えています。XNAの衝突奇妙な振る舞い
私はautomateSpriteとPlayerクラスの両方のリストをSpriteクラスから派生しています。 更新方法で私は遊びをチェックしており、aotomatedSpriteの四角形が互いに接触しています。リストを乗り越えたら、衝突を表すtouchingという文字列があります。
私の問題は、プレイヤー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);
}
編集:
ここコードです---------------------------------------- 解答: 私はゲームで尋ねますdevlopmentセクションと私は答えを得た。 私はbreak;
をforeachループに持っていなければならなかったので、それはコリソンを見つけた後も続かないでしょう。
ありがとう、それでも私は同じ結果を与えた、私はゲーム開発でそれを尋ねたと1は、コリソンがあるときforeachで休憩を使用するように私に言った。 – samy
さて、修正しました。とにかく、それも働くことができます。 – Matzi