2011-10-17 3 views
3

私はいくつかの体(私は実行時にますます多くを作ることができます)を持っており、画面中心に磁化する必要があります。それは、世界の空間で(480/2/WORLD_SCALE、320/2/WORLD_SCALE)にしましょう。私は多分これを達成するための簡単な方法があるBOX2Dに新しいですが、私は以下のようにそれを行うにしようとしています:体が磁化されているときにbox2dジッターが発生する

  1. 私は、各ボディーの位置と画面中央の位置を引く - 私は必要な場所への方向を取得します私の体を動かす。
  2. に(私はPに持っていること。3)ベクトルを追加
  3. 私の重力電力値に(私はP.1で見つけた)方向ベクトル
  4. 乗にこの正規化ベクトルを正規化現在のボディーのスピード

ボディーはスクリーンセンターに磁化します。ボディーは止めることができるように、摩擦やダンピングも加えます。しかし、私が仮定するように、私の重力ベクトルは一定の長さであるため、私は体が完全に動くのを止めることができません。それは常にスクリーン中心に移動しようとし、できるだけ小さな速度をとる - この重力ベクトルの長さです。

私は体が1体しかなければ、体が画面の中心に近づいてから重力の大きさになると2,3のステップを実行しません。しかし、私は磁場の中心にボディの位置を縛ることができません。なぜなら、2つのボディは互いに衝突するので、真ん中のスクリーンの場所を決して通過しないからです。だから、私は重力ベクトルを可変にすることはできませんし、摩擦を伴って遊んでいないと、何かのステップハックが助けになるかもしれませんが、私は何らかの反発力やそのようなものを実装する必要があると思います。

私はbox2dの新機能であり、物理的にあまり良くありません。

また、私は体の速度をSetLinearVelocityメソッドで設定することも重要です。

たぶん私は何かを見逃しているかもしれません。多分、これを達成するためのボックス2ネイティブのネイティブがあります。どんな助けもありがたい。

答えて

2

ワールドスケールを変更してこの問題を解決しましたか? 「Box2Dは、衝突速度が小さいときに非弾性衝突を使用します。これは、ジッタを防ぐために行われます。 http://www.box2d.org/manual.html 私は、加速度ベクトルを小さくしてbox2dがこの非弾性衝突を使用して、 "ネイティブ"な方法でそのジッタを防ぐようにしなければならないことを知りました。 WORLD_SCALEを4倍にすると、身体とスクリーンセンターとの距離が十分に大きくなりました。重力と摩擦力の新しい数字で遊んで、このトリックを作りました。

よろしく、イゴール

関連する問題