Я читаю книгу «Изучение XNA 4.0», и я в объектно-ориентированной части дизайна. У меня возникла странная проблема с столкновением из двух прямоугольников.XNA столкновения странное поведение
У меня есть список automateSprite и класс игрока, оба производные от класса Sprite. В методе обновления я проверяю игру, а прямоугольники aotomatedSprite касаются друг друга, теперь, когда я перебрался через список, у меня есть строка, называемая касанием, представляющая столкновение.
Моя проблема заключается в том, что прикосновение можно изменить, только если игрок Sprite коснется последнего automateSprite в списке.
Код, предлагаемый для тестирования, должен состоять из Game.Exit()
, если обнаружен какой-либо конфликт. Это работает с каждым автоматическимSprite в списке, но когда я меняю его на мой простой тест, он действует, как будто я проверяю только последний элемент из списка из 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, чтобы он не продолжал идти после того, как он нашел столкновение.
спасибо, но он все равно дал мне тот же результат, я спросил его в игре devlopment и 1 сказал мне использовать перерыв в foreach, когда есть какой-либо конфликт. – samy
Хорошо, исправил. Во всяком случае, это тоже может работать. – Matzi