残念ながら、あなたが正しいです、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()メソッドは、2つのボディが接触したときに起動します。適用される力は接触法線の方向にあります(これはあなたを身体から他の身体に移動させます)。
コンタクトリスナーシステムが設定されているため、ボールまたはプレーヤーのいずれかがb2ContactPoint構造体のbody#1になる可能性があるため、その可能性をコードする必要があります。法線の方向は、どちらがボディ#1(したがってマイナス記号)であるかに依存する。私は実際にどの方向に進むかを覚えていないので、力を逆にする必要があるかもしれません(他のブランチにマイナス記号を入れてください)。
それ以外は合理的に明らかです。 Box2Dはここでよく知られているようには見えないので、Box2Dフォーラム(http://www.box2d.org/forum/)
の例でコードラインが本当に役に立ちます:) –
@Oleg、それは役に立ちますか? –
ありがとう! –