2009-05-27 23 views
3

私は、アイソメトリックなゲーム世界全体で2Dスプライトを移動(アニメーション化)する方法を探していますが、動きはタイルからタイルへの移動としてスムーズにアニメーションされます。それらを1つのタイルの境界から次のタイルの境界にジャンプさせます。アイソメの世界のタイルの間でスプライトを移動する

この例は、列車とキャリッジがしばしば1タイルの半分であり、残りが半分であるトランスポート・タイクーン・ゲームにあります。

答えて

10

スプライトを適切な場所に描画することはあまり難しくありません。投影式のとおりです。(あなたがしたい場合や浮動小数点)

screen_x = sprite_x - sprite_y 
screen_y = (sprite_x + sprite_y)/2 + sprite_z 

sprite_xとsprite_yは、固定小数点値です。通常、固定小数点の精度はタイルのピクセル数です。したがって、タイルグラフィックが32×16(投影された32×32の正方形)の場合、5ビットの精度、つまりタイルの1/32が得られます。

本当に難しいのは、スプライトを正しくレンダリングする順序に並べ替えることです。描画にOpenGLを使用する場合は、zバッファを使用してこれを簡単に行うことができます。 GDI、DirectXなどを使用すると、それは本当に難しいです。 Transport Tycoonはすべてのインスタンスでスプライトを正しくレンダリングしません。オリジナルのTransport Tycoonには、これまでに見た中で最も恐ろしいレンダリングエンジンがありました。 3つのズームレベルを実装したのは、大規模なマスクマクロの3つのインスタンス化です。 TTは完全にアセンブラで書かれました。私は何年も前にそれをMacに移植したので(PS1開発キットのクールなバージョンもやったが、6Mbも必要だった)私は知っている。

P.S.ゲーム内の小さなバンガローグラフィックの1つは、クリスソーヤーがその時に住んでいた家に基づいていました。私たちは、フェラーリをMac版のドライブウェイに駐車して追加したいと思っていました。それは、ロイヤルティーで買った車だったからです。

0

なぜタイルからタイルにジャンプすると思いますか?任意のx、y座標でスプライトを配置することができます。

まず、背景画面のバッファを作成し、その上にスプライトを配置します。

4

線形補間を行う方法を調べます(これはかなり簡単な式です)。これを使用して、単一[0、1]の範囲でトランジションをパラメータ化することができます。あなたは、単に事実を保存するために、あなたのスプライト状態を持っている:

  1. 彼らは
  2. 始点と終点
  3. 開始時刻と終了時刻(または開始時刻と継続時間

を移動していること開始点から終了点までの補間を使用して、各フレームを正しい位置に描画することができます。継続時間を超えると、スプライトは移動しないように更新され、エンドポイント/タイルに配置されます。

関連する問題