Бурундук Физика или Box2D для C ++ 2D GameEngine? - PullRequest
11 голосов
/ 25 апреля 2010

Я разрабатываю то, что превращается в «кроссплатформенный» 2D Game Engine, моя первоначальная цель платформы - iPhone OS, но я могу перейти на Android или даже на какую-нибудь консоль, такую ​​как PSP или Nintendo DS, я хочу оставьте мои варианты открытыми.

Мой движок разработан на C ++, и я много читал о Box2D и Бурундуке, но все же я не могу решить, какой из них использовать в качестве своего физического программного обеспечения.

Бурундук, похоже, был легко встроен, и Box2D, похоже, широко используется. Бурундук - это C, а Box2D - это C ++, но я слышал, что API Box2D намного хуже, чем API бурундука.

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

Я ценю:

1) Good API's
2) Easy to integrate.
3) Portability.

И, конечно, если вы заметите что-нибудь еще, я бы хотел это услышать.

Как вы думаете, какой из них лучше соответствует моим потребностям?

РЕДАКТИРОВАТЬ : я закончил тем, что написал статью о своем конкретном выборе, вы можете найти ее здесь

Ответы [ 3 ]

6 голосов
/ 04 мая 2010

Я использую оба, но когда я могу выбрать, я беру бурундук, у него гораздо лучший API, и его было намного легче выучить ...

Но это потому, что я выучил это без необходимости в сообществе, руководство полностью в порядке.

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

Другие проблемы, которые имеет Box2D, это то, как он хранит объекты, Бурундук использует пространственный хеш, а Box2D использует бинарное дерево, в моей игре были МАССОВЫЕ замедления на уровнях с большим количеством объектов, я спросил Эрин (автора Box2D) причина, и он объяснил, что поскольку Box2D использует двоичное дерево, если вы помещаете объекты в сетку (как я уже говорил, моя игра - клон прорыва! все в сетке!), дерево становится неуравновешенным, и Box2D замедляется. Решением для моей игры было сделать несколько уровней в шахматном порядке, чтобы избежать этой проблемы.

Итак, для всех игр, основанных на тайлах, я просто буду использовать Бурундук, для них Box2D действительно не подходит (потому что ошибка в углу на плитке и ошибка замедления с сеткой плиток)

4 голосов
/ 25 апреля 2010

Вы правы, бурундук был разработан для улучшения многих мест, где Box2D падает.

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

2 голосов
/ 30 августа 2011

Бурундук - это прямой C, а Box2D - C ++. Существует также новый набор привязок Objective-C для Бурундука, но они не бесплатны для коммерческого использования.

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

В конце дня, насколько я слышал, они оба великолепны. Если вы предпочитаете C ++ C или вам необходимо непрерывное обнаружение столкновений, вам, вероятно, следует выбрать Box2D.

Если вы предпочитаете использовать чистую библиотеку C, используйте Chipmunk.

Я лично использую Box2D, и мой опыт пока был фантастическим.

Кроме того, я думаю, что Box2D имеет другой (возможно, больший) набор типов соединений, так что это может быть чем-то, что следует учитывать ...

...