スクロール2Dゲームでは、オブジェクトを移動する必要がありますか、それともカメラを移動する必要がありますか?


8

私はゲームデザインが初めてなので、どのように行われるのか本当にわかりません。私は、船が途中で(可変速度で)可能な限り高く飛行し、パワーアップなどを収集するiOSゲームを構築することを考えています。

ここに行く方法は何ですか?背景とアイテムは上から下にスクロールする必要がありますか、それとも船はそれとともにビューを移動しながら実際に飛ぶ必要がありますか?


唯一の正解は「両方」です。
Blecki

回答:


6

それはすべて相対的です。本当に、あなたは常にあなたの固定されたプレーヤーの位置に関連してあなたの見方を変えています。

したがって、ここでは画面を忘れて、次の3つのステップがあるとしましょう(各ゲームループで更新される位置を表します)。

  1. playerWorldPosition = 50, 100; objectWorldPosition = 60, 200;
  2. playerWorldPosition = 55, 110; objectWorldPosition = 60, 160;
  3. playerWorldPosition = 60, 120; objectWorldPosition = 60, 120;

(それぞれの場合のx、yとして)

ご覧のように、オブジェクト(パワーアップの可能性があります)がまっすぐに落下している間、プレイヤーは飛んでいる、またはジャンプして少し右に移動しています。プレイヤーはパワーアップをキャッチします。これをどのように画面上に描画しますか?

まず、プレーヤーを常に画面の中央に配置したいとします。したがって、ビューはプレーヤーにロックされます。これは、視覚化する最も簡単な方法です。プレーヤーの位置は常にscreenCentre(つまりscreenWidth/2, screenHeight/2)になります。それでは、世界の他のオブジェクトの画面上の位置をどのように取得しますか?

objectScreenPosition = (objectWorldPosition - playerWorldPosition) + screenCentre;

(playerWorldPosition- playerWorldPosition) + screenCentreがに等しいため、この式は実際のプレーヤーでも機能することがわかりscreenCentreます。そのため、リストを実行して、ゲーム内の各エンティティに同じ数式を適用できます。この単純なアプローチを使用して、他のもの(カメララグ、レベルの隅にいる場合など)に基づいて構築できます。


また、プレーヤーオブジェクトが0個または多数ある場合はどうなりますか?手ぶれなどの特殊効果を実行したい場合はどうすればよいですか?数学は同じに見えても、実際には同じではありません。そして、それはどちらか一方ではありません。オブジェクトが移動し、カメラも移動します。
Blecki

1
@Blecki ...あなたは、答えが受け入れられた後に言います。それらが本当に異なると本当に思うならば、あなたはあなたの見解を設定するのに苦労する必要があります。次に、すべての主要なケースを処理するビュー変換に関する独自の簡潔な回答を書きます。誰もあなたを止めません。
エンジニア、

カメラがあり、位置があり、ビューマトリックスを作成します。コーナーケースはありません。
Blecki、2011年

1
@Blecki今、あなたは自分と矛盾しています。「手ぶれなどの特殊効果を実行したい場合はどうなりますか?」
エンジニア、

1
@Blecki。正しい。同意してよかったです。
エンジニア、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.