2D スプライトをアイソメトリック ゲームの世界で移動 (およびアニメーション化) する方法についての情報を探していますが、1 つのタイルの境界からジャンプさせるのではなく、タイルからタイルへの移動としてスムーズにアニメーション化します。次の境界。
この例は、トランスポート タイクーン ゲームで、列車と車両が 1 つのタイルに半分ずつ、もう 1 つのタイルに半分ずつ配置されていることがよくあります。
スプライトを適切な場所に描画することはそれほど難しくありません。投影式は次のとおりです。
screen_x = sprite_x - sprite_y
screen_y = (sprite_x + sprite_y) / 2 + sprite_z
sprite_x と sprite_y は固定小数点値 (必要に応じて浮動小数点値) です。通常、固定小数点の精度はタイル上のピクセル数です。したがって、タイル グラフィックが 32x16 (投影された 32x32 正方形) の場合、精度は 5 ビット、つまりタイルの 1/32 になります。
本当に難しいのは、正しくレンダリングされる順序でスプライトをソートすることです。描画に OpenGL を使用する場合は、z バッファーを使用してこれを非常に簡単にすることができます。GDI や DirectX などを使用すると、非常に困難です。Transport Tycoon は、すべてのインスタンスでスプライトを正しくレンダリングしません。オリジナルの Transport Tycoon には、今まで見た中で最も恐ろしいレンダリング エンジンが搭載されていました。実装された 3 つのズーム レベルは、大規模な質量マクロの 3 つのインスタンス化です。TT はすべてアセンブラで書かれています。何年も前に Mac に移植したからです (PS1 開発キット用のクールなバージョンも作成しましたが、6Mb が必要でした)。
PS ゲーム内の小さなバンガローのグラフィックの 1 つは、Chris Sawyer が当時住んでいた家に基づいていました。Mac バージョンの私道に駐車したフェラーリを追加したくなりました。それは彼が使用料で購入した車だったからです。
線形補間の方法を調べてください (これは非常に単純な式です)。これを使用して、単一の [0, 1] 範囲で遷移をパラメーター化できます。次に、スプライトに事実を保存するための状態を設定します。
そして、開始点から終了点までの補間を使用して、各フレームを正しい位置に描画できます。期間を超えると、スプライトは更新されて動かなくなり、終点/タイルに配置されます。
なぜタイルからタイルへとジャンプすると考えているのですか? スプライトは任意の x、y 座標に配置できます。
最初にバックグラウンド スクリーン バッファを作成し、その上にスプライトを配置します。