2010-11-24 4 views
1

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

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

ответ

2

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

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

редактировать

я напечатал это от верхней части моей головы, я не уверен, что это точно.

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) или что-то в этом роде.

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

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

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

+0

строка кода в качестве примера будет действительно полезна :) – 2010-11-24 14:50:31

Смежные вопросы