0

CCTMXMap の周りでスプライトをスムーズに移動しようとしています。(CCActions を使用して) タイルからタイルに移動する方法を理解しましたが、アニメーションにギャップが生じます (どの方向を歩くかを再評価する間、フレームが一時停止します)。スケジュールされた update: メソッドでキャラクターを移動しようとしましたが、スプライトをタイルからタイルへの移動のみに制限しようとすると、面倒になります。update を使用して面倒な手動アニメーションを使用せずに、クリーンで一貫したアニメーションを取得する方法について何か提案はありますか?

4

1 に答える 1

1

はい、アクションを使用しないでください。CCActions を使用すると、常に 1 フレームの遅延の問題が発生します。

update でスプライトを移動するのは非常に簡単です。特に、動きをタイル サイズで割り切れる速度 (フレームあたりのポイント数) に制限する場合。たとえば、タイルが 40x30 の場合、水平方向の速度は 1、2、4、8、10 で問題ありません。垂直に 1,2,3,5,6,10 が機能します。

この数値で位置を更新し、int にキャストして、宛先の場所と比較します。

if ((int)currentPos.x == (int)targetPos.x && (int)currentPos.y == (int)targetPos.y)
{
    NSLog(@"I'm there!");
}

int にキャストする理由は、浮動小数点値の丸め誤差を避けるためです。

もう 1 つの解決策は、特にキャラクターが一度に一方向にしか移動できない場合は、そこに到達するまでにかかるフレーム数を計算することです。キャラクターが右に 40 ポイント移動する必要があり、1 フレームあたり 4 ポイント移動する場合、10 フレームかかります。次に、フレーム数 (更新メソッドが実行された回数) をカウントし、それが 10 (カウントダウンの場合は 0) に達した場合、キャラクターが到着したことがわかり、位置を確認する必要はありません。

于 2012-12-19T23:09:50.477 に答える