Только для обнаружения столкновений Бурундук или Box2d - лучший инструмент? - PullRequest
6 голосов
/ 06 октября 2011

Для проекта на основе Cocos2d я хотел бы использовать физический инструментарий только для обнаружения столкновений.Каковы плюсы / минусы использования Бурундука или Box2d?

Ответы [ 2 ]

9 голосов
/ 21 декабря 2011

Согласно этому ответу Бурундук не поддерживает непрерывное обнаружение столкновений, но Box2D поддерживает.Это важно для предотвращения "туннелирования" (объекты, проходящие немного друг через друга при движении на высоких скоростях)

Это поясняется комментарием Штеффена Иттерхейма к его Box2D vs Chipmunk FAQ : Если у вас будут очень быстро движущиеся физические объекты, например, «Пули», рассмотрите возможность использования Box2D, поскольку он может выполнять быстрые столкновения, такие как непрерывная интеграция столкновений, чтобы предотвратить быстрое проникновение быстро движущихся объектов или даже туннелирование через другие объекты.

В документах Обнаружение столкновений с бурундуком документы говорят о separate() обратном вызове. Две фигуры только что перестали касаться в первый раз на этом шаге. но мне было неясно, имеет ли это какое-либо значение их способности обнаруживать столкновения на скорости.

Существует также очень негативное мнение об использовании Box2D для брейк-игры Моя текущая игра использует Box2D, и я хотел бы использовать Бурундук с ним ... В основном потому, что у Box2D есть две серьезные проблемы, которые усугубляются в моей игреВо-первых, это ДЕЙСТВИТЕЛЬНО СТАРЫЙ баг, когда объекты «зацепляются» по углам, моя игра - это игра-прорыв, поэтому, когда мяч «катится» по стене, иногда он зацепляется и отбрасывается от стены, много людейспросил, почему моя игровая физика выглядит «случайной».

Вывод: я тоже запутался.

4 голосов
/ 11 октября 2011

О каких коллизиях мы говорим?

Если все, что вам нужно, это:

  • rect пересекает прямоугольник -> CGRectIntersectsRect (..)
  • точка в прямоугольнике -> CGRectContainsPoint (..)
  • радиус пересечения (т. е. расстояние между двумя точками) -> ccpDistance (..)

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

Бурундук и Box2D одинаково хорошо справляются с коллизиями.Я придерживаюсь мнения, что если кто-то спрашивает «что лучше», это не будет иметь для вас значения.Вместо этого спросите себя, удобнее ли вам работать с C (Бурундук) или C ++ (Box2D).

Аналогичным образом, вы предпочитаете работать с объектно-ориентированным, подробным API (Box2D)) или функциональный, сильно сокращенный API (Бурундук)?

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

...