1

フォーラムを掃除した後、これを見つけることができませんでした。こんな感じで実装したいのですが・・・主人公は常に向いている方向に動きます。プレイヤーが画面に触れると、キャラクターはそのタッチした場所の方を向くようになり、体が別の方向に動くはずです。

次のように、キャラクターをタッチ位置に向けることができます。

CGPoint diff = ccpSub(location, self.position);
CGFloat targetAngle = atan2f(diff.y, diff.x);
self.body->a = targetAngle;

私はこれらの線に沿ったものが欲しいです。キャラクターが向いている現在の角度を取得します。その角度を単位ベクトルに変換します。その単位ベクトルに max_velocity を掛けて、キャラクターに適用します。これは(理論的には)一定の速度でキャラクターが向いている方向にキャラクターを動かすはずですか?

これは私が欲しいものを私に与えるようです:

cpVect rotatedVel = cpvmult(ccpForAngle(self.body->a), MAX_VELOCITY);
self.body->v = cpvlerpconst(self.body->v, rotatedVel, ACCELERATION * dt);

今必要なのは、時間をかけてゆっくりとキャラクターの方向を回転させる方法だけです。どうすればそれを行うことができますか?

4

2 に答える 2

0

Chipmunk の Tank デモから次のようなことをしたいようです。

// turn the control body based on the angle relative to the actual body
cpVect mouseDelta = cpvsub(ChipmunkDemoMouse, cpBodyGetPos(tankBody));
cpFloat turn = cpvtoangle(cpvunrotate(cpBodyGetRot(tankBody), mouseDelta));
cpBodySetAngle(tankControlBody, cpBodyGetAngle(tankBody) - turn);

'turn' は、ボディの現在の回転に対して方向ベクトルを変換することによって、ボディの現在の回転に対して計算されます。デモでは、制約を使用して回転を滑らかにします (ここでも考慮する必要があります) が、最大角速度を取得するために「ターン」で cpflerpconst() を使用することもできます。

于 2013-04-30T18:50:49.553 に答える