世界を動かすか、プレイヤーを動かすか?


11

私は、横スクロールゲームを開発しようとしています。プレーヤーの目標は、タッチダウンする前に、できるだけ横軸に移動することです。水平軸に戻る必要がないことに注意してください。

私は、OpenGLとBox2dを使用するAndEngine for Androidでこれを開発しています。

開始する前に、何か重要なことを決定する必要があります。プレイヤーの周りの世界を使用して動きをシミュレートするか、実際にプレイヤーを動かして、ゲームエンジンのカメラ機能で彼を追跡する必要がありますか?

どちらのアプローチにも長所とフォールバックがあり、どちらが最適であるかはわかりません。たとえば、途中でパワーアップを追加し、アニメーション化された背景を簡単にするにはどうすればよいでしょうか?

ありがとう!


2
カメラを動かします。
ジョナサンディキンソン

1
カメラを使用したくない特別な理由がない限り(既に作成されています)、プレーヤーとカメラを移動する必要があります。「パワーアップ」の追加はどちらの方法でも影響を受けません。
クリストファーホレンシュタイン2012年

回答:


9

カメラを移動します(プレーヤーに接続されています)。あなたの世界には敵のような複数のオブジェクトがあると思います。ワールドを移動する場合は、これらのすべてのオブジェクトをループして、ワールドが移動するたびに位置を更新する必要があります。

プレーヤーを移動し、カメラをプレーヤーに接続すると、リソースの使用量が最小限になります。ゲームはレンダリングフェーズに移行し、すべてのフレームと同じように一度すべてをループし、それらを特定の位置(camera.position)に描画します。この場合、カメラの位置は常にプレーヤーの位置と等しくなります。


もちろん、オブジェクトが敵である場合、それらをループする必要はなく、更新メソッドでオブジェクトにワールドの動きを追加するだけです。
サーヤカロット2012年

1
+1。camera.setChaseEntity(player);これを達成するために使用します。
MartinTeeVarga 2013年

6

私はいつもカメラを動かして、それをお勧めします-私がこれを好む理由はたくさんありますが、最も重要なことはおそらくこれに要約されます:

  1. カメラとプレーヤーを移動する場合、画面をスクロールするために更新する必要があるのは2つのエンティティのみです。

  2. 画面をスクロールする必要があるときに世界全体を移動すると、更新する必要のある未知の、場合によっては多数のエンティティが含まれます。


私は同意しますが、敵のクラスに世界の動きを++する行を追加するだけでかなり簡単になると付け加えます。
サーヤカロット2012年

@AsherEinhorn私は、各ノードが親の変換を共有し、ルートノード(つまり、「ワールド」)を移動するだけで他のすべてが自動的に変換されるシーングラフなどのシナリオについて話していると思いますか?他のすべてのケースでは、世界を動かすことは世界のすべてを動かすことを意味するからです-それが私の投稿のポイントでした。
David Gouveia 2012年

世界の動きがプレイヤーに反比例する場合も同様です。すなわち-あなたは前進し、世界は後退し、そしてあなたは単に-=プレイヤーがすべてのゲームオブジェクトに移動することができます。私はあなたに同意します。私は、両方を機能させる簡単な方法があると言っているだけです。
サーヤカロット

4

これは非常に些細なことですが、あなたが説明したことと実際に違いはありません。

背景をカメラとプレーヤーを越えて移動するか、プレーヤーとカメラを一緒に移動します。背景を移動するだけで、やることが1つ減ると思います。

背景を移動する場合は、ピックアップと敵をその親にする必要があると思いますが、これも簡単なことですが、それについて考える必要があります。

個人的には、より現実的な方法で行うことが好きなので、プレイヤーを動かします。


0

他の回答も良いですが、別のプロジェクトで同じ決定を下そうとする人を助けるために、改善点をいくつか追加したいと思います。

プレーヤーの移動:

  • それは単純です。それ以外はすべて静的(ish)なので、単純化すると、プレーヤーを移動するために必要なのはplayer.x += 5;(疑似コード)だけです。
  • ほとんどの人にとって「クリックが良くなる」。ゲームをプレイするときは常に、プレイヤーが動くのではなく、逆に動いていると考えます。そのため、「世界ではなく、プレイヤーは動くべきだ」と考える方が簡単です。これにより、誰かが頭の中を整理しやすくなるかもしれません。
  • プレーヤーの位置を簡単に追跡できます(位置はマップ上の座標でもあります)

世界を動かす:

  • ゲームの大きさが十分であれば、プレーヤーの位置は常にに非常に近いため、世界の中心から離れすぎても、オーバーフロー/アンダーフローを心配する必要はありません0
  • 上記と同様に、3D計算をいじる場合、画面に表示されるものはすべてに非常に近いはずなので、浮動小数点の結果が不正確であることを心配する必要はありません0
  • 正しく行えば、「無限」の世界を作ることができます。
  • プレーヤーを手動で追跡する必要があります。プレーヤーの位置は常に小さい値になります。これは、プレーヤーが画面の左上にあるか右下にあるかを知るために、プレーヤーが画面のどこにいるかを示します(ちょっと)。何らかの方法でそれを追跡する必要があります。

結局のところ、それはプロジェクトに依存します。誰かがオリジナルのマリオクローンを作っている場合、世界を動かすことは複雑になる可能性がありますが、プレイヤーを動かすことは実際には多くの問題を引き起こしません。でも、巨大なオープンワールドゲームを作りたいなら、代わりに世界を動かすほうがいいかもしれません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.