1

画面をタッチすることで左右に移動できるキャラクターを使ってゲームを作りました。キャラクターの上にリンゴがあり、必要なのはリンゴが落ちることです。キャラクターはバレーボールのように再びリンゴを押し上げることができます. それが問題です。「バウンディングボール」から学んだことは、スプライトに形状と体を与えることです。その後、それらは自動的に衝突します。キャラクターに形状と体を与えると、アニメーションが機能せず、キャラクターが動き、次に、彼は開始点に「ジャンプ」します。スプライトにsetPositionまたはAction(MoveTo)を使用しても無駄です。体を動かすのも役に立ちません.touchmovedを使用して体を設定します-> p、揺れ続け、離すとボタン、それは常に範囲外に「飛びます」............誰かが私に何をすべきか、または同様の例を教えてもらえますか(例

誰かが私に手を差し伸べることができれば、私は感謝します。

4

2 に答える 2

5

シマリスの体と形をスプライトに追加することは、これを行う最善の方法ではありません。画面の視点から考えないようにしてください。代わりに、物理ボディとスプライトへの参照を含むコントローラーを作成します。

シマリスなどの物理エンジンを使用するのは、少し難しい場合があります。デバッグ描画を有効にするのに役立ちます。どうすればそれを実現できるかを考えてみましょう!通常の 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 がこれを行います)。

于 2009-11-18T17:03:12.600 に答える
1

最新のシマリスコードは、つかむオブジェクトとマウス(タッチ)の間にピボットジョイントを使用してこれを実行しています:ChipmunkDemo.c

参照:マウスの相互作用

于 2009-12-24T19:43:50.253 に答える