XNA 2D обнаружение столкновений - PullRequest
3 голосов
/ 29 марта 2012

Мне было интересно, где я мог бы найти хороший ресурсный материал о том, как я мог бы написать некоторое чистое кодирование для обнаружения столкновений.

Я довольно новичок в программировании XNA, и у меня есть общее понимание того, как бы я хотелнаписать свою игру, но у меня возникли серьезные проблемы с идеей обнаружения столкновений.Это уму непостижимо.

Я знаю, что вы можете использовать класс 2d boundingbox.Но после этого я застрял.Я не хочу проверять, сталкивается ли объект с КАЖДЫМ единственным объектом в игре, поэтому мне было интересно, может ли кто-нибудь указать мне правильное направление для какой-либо литературы по этому вопросу или чего-то такого.

Ответы [ 2 ]

0 голосов
/ 30 марта 2012

Многое зависит от масштаба и реализации вашей игры.Как организованы объекты?Игра организована в карты или только один экран?Какие объекты будут сталкиваться с какими другими объектами?

Если игра имеет достаточно малый масштаб, вам, возможно, не нужно беспокоиться об этом вообще.

Если нет, подумайте:

  • разделение игры на отдельные карты, где объекты на одной карте будут сталкиваться только с другими объектами на этой карте

  • организация списков врагов по типу, так что вы можете проверить только правильные виды объектов друг против друга.(то есть: снаряды не проверяют снаряды и т. д.).Например, я использую следующие словари, чтобы проверять только объекты определенного типа или только существ, принадлежащих к определенной фракции:

    private readonly Dictionary<Type, List<MapObject>> mTypeObjects = 
    new Dictionary<Type, List<MapObject>>();
    
    private readonly Dictionary<FACTION, List<MapObject>> mFactionCreatures =
    new Dictionary<FACTION, List<MapObject>>();
    
  • для максимальной эффективности,но в более сложной реализации вы можете использовать пространственное разбиение, где объекты организованы по «секторам», что позволяет мгновенно исключать удаленные объекты.

0 голосов
/ 29 марта 2012

Если вы просто пытаетесь свести к минимуму работу по обнаружению процессора, ознакомьтесь с реализациями QuadTree.Они в основном разбивают вашу «сцену» на более мелкие секции для оптимизации обнаружения (например, в C #): http://www.codeproject.com/Articles/30535/A-Simple-QuadTree-Implementation-in-C

Если вы говорите больше о реальной физике, посмотрите учебники от разработчиков N-Game:http://www.metanetsoftware.com/technique.html

Или просто используйте существующий физический движок XNA, например Farseer или Bullet.

...