У меня проблема с классом box2d as3 b2ContactListener.У меня есть класс с именем ContactListener, который расширяет b2ContactListener и переопределяет метод PostSolve.PostSolve принимает 2 параметра: контакт, который содержит информацию о 2 объектах, которые имеют контакт, и импульс, который содержит информацию о контакте.Я использую параметр импульса, чтобы решить, как сильно ударить 2 объекта, а затем соответствующим образом нанести урон.
Вот проблема: если я сделаю что-нибудь круглое, и пусть оно медленно катится по статическому телу, то яЕсли вы возьмете за землю, а затем уроните довольно большой объект в любом месте на земле, то окружность, находящаяся в движении, получит контакты, будет повторять импульс, который слишком велик для того, чтобы просто катиться.Это заставляет вращающиеся круглые объекты ломаться, когда они не должны.
Это почти как если бы оно сотрясало статическое тело и наносило огромный урон объектам на расстоянии сотен метров, но это затрагивало только круги.
Может кто-нибудь пролить свет на ситуацию?Это известная проблема?Обходные пути?
Я использую Box2DAs3 версии 2.1a.
Обновление: Как только тело входит в это странное состояние нанесения большого количества урона, любой круг, который касается его, получает тонныбольших импульсов.Когда что-то некруглое входит в контакт с телом, у него больше нет проблем.Также эта проблема касается не только статических объектов, но и динамических и кинематических.
Обновление: Я еще больше сузил проблему.Слушатель контактов сходит с ума и применяет массовые импульсы, когда плоский край большого объекта касается моего наземного объекта.Любой объект, а не только круги, который не спит и касается земли, получит тонны вызовов метода PostSolve.Я попытался опустить коробку размером 11 на 11 пикселей на землю, пока на ней катался круг.Ошибка не произошла.Однако, если поле 12 на 12, ошибка действительно возникает.Также, если я поверну коробку размером от 12 на 12 до 0,1 градуса, ошибка не возникнет.Должна быть достаточно большая контактная зона для воспроизведения.Также плотность коробки ничего не влияет.Также, если прямоугольник имеет ширину 10 и высоту 100, и ошибка будет воспроизведена.Это похоже на то, что только размер объекта вызывает ошибку, возможно, не область контакта.
Обновление: Вот ссылка на сделанное мной сообщение на форуме Box2D, в котором естьПример SWF с источником.
Ссылка