Быстрый вопрос о Box2D Contact Listener, Filter и Joints

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

  1. В моем методе обратного вызова beginContact я создаю новый объект Joint и добавляю его в свой мир. Однако, когда я это делаю, я получаю ошибку времени выполнения. Это потому, что в этих методах обратного вызова нельзя создавать и добавлять новые объекты в мир?

  2. Когда кто-то создает соединение, есть ли конкретное место, где должна быть точка привязки, чтобы избежать ошибок во время выполнения? На данный момент я усредняю ​​координаты всех точек контакта и использую их в качестве привязки, потому что хочу, чтобы объекты соединялись вместе в точке, где они сталкиваются. Я на правильном пути? Мысли? Комментарии?


person Olshansk    schedule 29.07.2011    source источник
comment
Хахахаха, все в меру может быть хорошо   -  person Olshansk    schedule 29.07.2011


Ответы (1)


Вы не можете создавать соединения в методе beginContact, потому что мир находится в состоянии симуляции. Вы должны сохранить все действия, которые вы хотите выполнить (например, создать суставы), в каком-то массиве или любой другой структуре и после завершения Step метода b2World выполнить действия, связанные с миром.

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

person Andrew    schedule 30.07.2011