シマリスの体と形をスプライトに追加することは、これを行う最善の方法ではありません。画面の視点から考えないようにしてください。代わりに、物理ボディとスプライトへの参照を含むコントローラーを作成します。
シマリスなどの物理エンジンを使用するのは、少し難しい場合があります。デバッグ描画を有効にするのに役立ちます。どうすればそれを実現できるかを考えてみましょう!通常の cocos2d ダウンロードに付属する cocos2d シマリスの例から取得できるコードがいくつかあります)。
「地面」シェイプを静的シェイプとして追加し、重力を設定したと思いますか?
問題を抱えて体を動かすとき、body->p = cpv(x,y);
その位置以外のオブジェクトの状態を変更しないことです。物理エンジンにとっては、オブジェクトをテレポートするようなものです。オブジェクトが落下していた場合は、引き続き落下します。
だから今、あなたの落下物は地面に触れていません。その速度は増加します。再び「テレポート」しますが、何かにぶつかるまで、重力は落下速度を上げ続けます。
そのため、オブジェクトを別のポイントに移動する場合は、必要に応じて、そのオブジェクトのすべての力と速度を必ずリセットしてください。
を使用するよりも良い方法は、これらの関数body->p
を使用することです:
- void cpBodySlew(cpBody *body, cpVect pos, cpFloat dt)
- void cpBodyUpdateVelocity(cpBody *body, cpVect 重力, cpFloat ダンピング, cpFloat dt)
- void cpBodyUpdatePosition(cpBody *body, cpFloat dt)
これらの関数のドキュメントはそれほど複雑ではありませんが、他にもドキュメントがあります。Google で検索してみてください :-p 私もまだこれらの関数の使い方を完全には習得していません (まだ Chipmunk も回避しようとしています)。
または、( を設定する代わりにbody->p
) オブジェクトの速度を直接設定することもできます (ただし、cpBodySlew がこれを行います)。