「Learning XNA 4.0」という本を読んでいて、オブジェクト指向設計の部分にいます。2 つの長方形の衝突で奇妙な問題が発生しています。
クラス Sprite から派生した、automateSprite と Player クラスのリストがあります。update メソッドでは、再生をチェックしており、aotomatedSprite の四角形が互いに接触しています。リストを通過すると、衝突を表す touch という文字列ができました。
私の問題は、プレーヤーのスプライトがリスト内の最後のautomaticSpriteに触れた場合にのみ変化します。
テストのために本が提供するコードは、Game.Exit()
衝突が見つかった場合に実行することです。リスト内のすべてのautomaticSpriteで機能しますが、単純なテストに変更すると、4つのautomaticSpriteのリストから最後の項目のみをチェックするように動作します.
コードは次のとおりです。
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 ループに含める必要がありました。