2012-05-02 7 views
2

私はキャラクタースプライトを、彼(矩形)が立っているか歩いているプラ​​ットフォームの範囲に従って回転させる必要があります。私は立っているプラ​​ットホームの斜面に従ってそれを回転させることによって効果を達成しました。しかし、2つの問題があります:歩いている/立っている斜面に従ってキャラクターをスムーズに回転させる方法は?

まず、回転が滑らかではありません。キャラクターが平らなプラットホームから傾斜したプラットホームへ歩くとき、それは即座に回転され、その回転のために少しだけ押し上げられます。

第2に、一度彼が斜面を降りて平坦なプラットフォームに戻ったら、それに応じてキャラクタを回転させることはできません。これは、その時点でキャラクターが平らなプラットホームと傾斜したプラットホームの両方に衝突する(それらは一緒に配置される)ため、いくつかのステップでは、2つの衝突検出機能が協調して機能するため、キャラクターは狂って前後に回転します。

私はキャラクターの顔を検出して解決しようとしましたが、最初に何か(左か右)が触れているのか分かりませんが、衝突は検出できませんでした。 「衝突なし」または「キャラクターがプラットフォームを離れるとき」。

状況の図を添付しました。助けてください、ありがとう!

PS:画像を投稿できないため、画像はhttp://i.stack.imgur.com/jqPjt.pngにアクセスしてください。ありがとう。

+0

特別な取り扱いを一切しないと、左側のケースが発生します...いいえ?エンジンにそのことをさせるだけなら、どうなりますか? – iforce2d

+0

@ iforce2d:私はそれを試しました...しかし、私が適用している力は、四角形の中心から始まり、下からはありません。したがって、斜面に当たると、(後ろに引くのではなく) 。もう1つのことは、このゲームはプラットフォームゲームのようなものなので、私はキャラクターを自由に回転させたくありません。 – Dai

答えて

2

あなたのローテーションは外に出ているようです。文字矩形の底辺を回転させる必要があります。それはあなたの問題のいくつかを解決しますが、すべてではありません。

文字が2つのプラットフォームに接触している場合は処理する必要があります。現在のところ、プラットフォームから直接角度を抽出してキャラクターに割り当てていると思います。それはあなたが異なる接触点を持っているときにあなたが任意の角度を必要とするので、それをカットするつもりはありません。

解決策は、2つの接触点の間にベクトルを作成し、ベクトルx,yの要素を取り、atan2(x, y)を呼び出します。これは接点間の角度をラジアンで与えます。あなたは正しい方法でパラメータを取得することを確認してください!ゲーム開発では、三角法とベクトル計算を知っている必要があります。ここで起こっているのは、2つの接触点で斜辺が定義された軸に直角の直角三角形を作成し、次にxとyのコンポーネントを交換して、その三角形を反転させて、tan = opp/adjを使用して角度を取得することです。

作成する三角形が他の方向を向いているため、接触点が常に特定の順序で指定されているか、奇妙な角度で回転してしまうことを確認する必要があります。まず、x座標に基づく並べ替えのような処理が必要な場合があります。

1

この例の簡単な解決策は、オブジェクト全体ではなく、コーナーで衝突検出を行うことです。タッチするだけのポイントをカットするような角度でタッチするポイントでオブジェクトを回転させることができます。この解決法は、あなたが上を向いていて、下を向いていない場合にのみ機能する。それを解決するために、側面でも衝突検出を行います。次に、タッチするコーナーを、その側が触れる角度で回転させます。

+0

申し訳ありませんが、両方の回答を受け入れられた回答としてマークすることはできません(まだ私は十分な評判を得た時点でupvoteできません)。 box2dでは、あなたが言ったように、私は実際にオブジェクト全体の衝突検出を行うことによって正確な接触点を得ることができません。私はオブジェクトのコーナーにいくつかのセンサーを置き、回転角度を決定するためにそれらを使用しようとしています。ありがとうございました。 – Dai