2

ビューポートが有限ゲームの世界でプレイヤーの船を追うゲームをコーディングしていて、背景がすべての方向に「ラップ」するようにしようとしています(2Dサーフェスがラップされたと考えることができます)球体-どの方向に移動しても、開始した場所に戻ることになります)。

船とオブジェクトをラップするのに問題はありませんが、ビューポート自体がゲームワールドの端を通過するまで背景は表示されません。背景の表面を「ラップ」させることは可能ですか?

私があまり明確になっていない場合は申し訳ありません。それは単純な問題のようで、たくさんのゲームがそれをします、しかし私は答えを見つけることができませんでした。背景をタイリングすることでそれを行う方法についてはいくつかの考えがありますが、表面をラップするように指示できればいいのですが。

4

3 に答える 3

0

私はそうは思いませんが、私には考えがあります。あなたの背景は水平に、そして常に右側に折り返されていると思います。そうすれば、背景の最初の部分を最後に付けることができます。

たとえば、背景が10,000ピクセルで、ビューポートが1000ピクセルの場合、最初の1000ピクセルを背景の最後にアタッチすると、背景が11,000ピクセルになります。次に、ビューポートが背景の終わりに達したら、それを0pxの位置に移動し、右に移動し続けます。

于 2012-10-25T11:59:05.353 に答える
0

私はあなたが説明したものに似た、役に立つかもしれない何かをいじくり回していました。すべてのタイルを含む単一のマップクラスを使用することにしました。一度に一部だけをメモリにロードしたかったので、セクター(32x32タイル)に分割しました。一度にロードできるのは3x3セクターのみに制限しました。マップが端までスクロールすると、反対側のセクターがアンロードされ、新しいセクターがロードされます。

私のMapクラスには、ロードされたすべてのセクターのRectがあり、私のカメラには、それが配置された場所のRectがあります。ティックごとに、これら2つのレクを使用して、マップのどの部分をブリットする必要があるか、および新しいセクターをロードする必要があるかどうかを確認します。ロードされるセクターを変更し始めたら、シフトする必要があります

各セクターには次の属性があります。1。その座標。(0,0)は世界で最も左上にあるセクターです。2.その相対セクター座標。(0,0)は左上の最も負荷の高いセクターであり、(2,2)3x3がロードされている場合は右下のセクターです。3.セクターの領域を保持するRect4.セクターを示すブール値が完全にロードされました

各ゲームティックは、ブール値が完全にロードされているかどうかを確認し、ロードされていない場合は、Xタイルをマップサーフェスにブリットするジェネレーターを次に呼び出します。私

  1. 表面全体
  2. 各更新は、既存のセクターをアンロード、ロード、または更新します
  3. 既存のセクターが更新されると、シフトします

更新時にセクターをアンロードしてから、必要な新しいセクターを作成します。作成された後、各セクターは、更新ごとにX個のタイルをブリットするジェネレーターを起動します

于 2012-10-27T03:24:25.080 に答える
0

提案してくれてありがとう。私は提供された答えとは少し違うことをすることになった。基本的に、メインサーフェスのサブサーフェスを作成してバッファとして使用し、ビューポートに世界外の座標が含まれている場合は常にそれらを適切に表示しました。スクロールは全方向性であるため、各サイドと4つのコーナーすべてに1つずつ、合計8つのバッファーを使用する必要がありました。私のソリューションは最もエレガントではないかもしれませんが、目立ったパフォーマンスの低下はなく、うまく機能しているようです。

于 2012-10-30T00:05:33.127 に答える