К сожалению, вы правы, 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/)
строка кода в качестве примера будет действительно полезна :) – 2010-11-24 14:50:31