Вопрос по html5, javascript, canvas – Box2dweb - контактная точка столкновения

8

Я использую box2dweb. Я пытаюсь разработать игру. В какой-то момент мне нужно выяснить контактную точку между «кругом»; и "Коробка". Все, что я знаю, это то, что можно сделать, используя b2ContactListener. Мы можем получить контактные данные, внедрив b2ContactListener с помощью события Post-Solve. Пожалуйста помоги!

Это может помочь:iforce2d.net/b2dtut/collision-anatomy iforce2d

Ваш Ответ

1   ответ
16

есть различные события, которые вы можете подключить с помощью b2ContactListener:

var b2Listener = Box2D.Dynamics.b2ContactListener;

//Add listeners for contact
var listener = new b2Listener;

listener.BeginContact = function(contact) {
    //console.log(contact.GetFixtureA().GetBody().GetUserData());
}

listener.EndContact = function(contact) {
    // console.log(contact.GetFixtureA().GetBody().GetUserData());
}

listener.PostSolve = function(contact, impulse) {
    if (contact.GetFixtureA().GetBody().GetUserData() == 'ball' || contact.GetFixtureB().GetBody().GetUserData() == 'ball') {
        var impulse = impulse.normalImpulses[0];
        if (impulse < 0.2) return; //threshold ignore small impacts
        world.ball.impulse = impulse > 0.6 ? 0.5 : impulse;
        console.log(world.ball.impulse);
    }
}

listener.PreSolve = function(contact, oldManifold) {
    // PreSolve
}

this.world.SetContactListener(listener);

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

Сет Лэдд имеет несколько отличных статей в своем блоге о столкновении / реагировании на них. Вот где я взял эти биты, так что вся заслуга ему.

Надеюсь, это поможет.

Спасибо, Gary

Спасибо чувак. Теперь я также могу получить точные контактные данные. Shekhar
Я написал блог об этом. Если вы хотите, вы можете проверить это.thenightowl.xp3.biz Shekhar
В заключение! Объяснение CollisionHandler в Javscript
Мне жаль, но я полный нуб с Box2D, и если я добавлю свой собственный слушатель с пустымBeginContact а такжеEndContact функции мой скрипт выдает ошибку и ничего не отображается. Все, что я хочу сделать, это изменить линейное демпфирование объектов, когда они касаются земли, и вернуть их в нормальное состояние, когда они находятся в воздухе.
Мое плохое: P Не понял, что вам нужно было добавить все 4 метода.

Похожие вопросы