box2D flash: выборочное изменение - PullRequest
1 голос
/ 24 ноября 2010

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

Но если я пытаюсь установить реституцию для игрока и для настенных объектов по-другому, я также замечаю, что сам игрок отскакивает от стены ... Есть ли способ, которым я могу сделать это выборочно? Например. удар по полу не должен вызывать отскок игрока ... Но если игрок ударил по мячу, он должен сильно подпрыгивать.

1 Ответ

2 голосов
/ 24 ноября 2010

К сожалению, вы правы, Box2D не имеет этой настройки.

Вместо этого вы можете прослушивать событие прослушивателя контактов, которое соответствует как игроку, так и мячу.Когда это происходит, вы прикладываете очень большую силу к мячу.

edit

Я набрал это на макушке головы, я не уверен, что это правильно.

public class MyContactListener extends b2ContactListener {
    override public function Add(point:b2ContactPoint):void {
        var ball:b2Body = ...
        var player:b2Body = ... // fill these
        var force:b2Vec2;

        if(point.shape1.GetBody() == ball && point.shape2.GetBody() == player) {
            force = point.normal.Copy();
            force.Multiply(SOMETHING);
            ball.ApplyForce(force);
        } else if(point.shape1.GetBody() == player && point.shape2.GetBody() == ball) {
            force = point.normal.Copy();
            force.Multiply(-SOMETHING);
            ball.ApplyForce(force);
        }
    }
}

Что здесь происходит.

Вам необходимо создать экземпляр этого класса и зарегистрировать его в мире, который, вероятно, похож на world.SetContactListener(new MyContactListener) или что-то в этом роде.

The Add () метод срабатывает, когда два тела вступают в контакт.Применяемая сила направлена ​​в направлении нормали контакта (которая переносит вас из одного тела в другое).

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

Кроме того, это должно быть достаточно ясно.Box2D, кажется, не так хорошо известен здесь, так что вам, возможно, повезет больше на форумах Box2D (http://www.box2d.org/forum/)

...