Haruskah saya memindahkan dunia atau memindahkan pemain?

11

Saya akan mulai mengembangkan permainan sidescrolling di mana tujuan pemain adalah melakukan perjalanan sejauh yang dia bisa dalam sumbu horizontal sebelum mendarat. Perhatikan bahwa saya tidak perlu pernah melakukan perjalanan kembali pada sumbu horizontal.

Saya mengembangkan ini dengan AndEngine untuk Android yang menggunakan OpenGL dan Box2d.

Sebelum memulai, saya perlu memutuskan sesuatu yang penting: haruskah saya menggunakan dunia di sekitar pemain untuk mensimulasikan gerakan atau benar-benar menggerakkan pemain dan mengikutinya dengan fitur kamera mesin gim?

Kedua pendekatan ini tampaknya memiliki kekuatan dan kelemahan yang berbeda, jadi saya tidak tahu mana yang dianggap terbaik. Misalnya, apa yang akan membuatnya lebih mudah untuk menambahkan power up di sepanjang jalan dan memiliki latar belakang animasi yang bagus?

Terima kasih!

monoceres
sumber
2
Pindahkan kamera.
Jonathan Dickinson
1
Kecuali Anda memiliki alasan khusus untuk tidak ingin menggunakan kamera (yang sudah dituliskan untuk Anda), Anda harus memindahkan pemutar dan kamera. Menambahkan "power-up" seharusnya tidak terpengaruh.
Christopher Horenstein

Jawaban:

9

Pindahkan kamera (terpasang ke pemutar Anda). Saya akan membayangkan bahwa duniamu memiliki banyak objek seperti musuh. Jika Anda pergi dengan memindahkan dunia, Anda harus mengulang semua objek ini untuk memperbarui posisi mereka setiap kali dunia bergerak.

Jika Anda memindahkan pemain, dan memasang kamera ke pemain maka ada penggunaan sumber daya minimal. Gim ini akan sampai pada fase render-nya, loop melalui segala sesuatu seperti yang dilakukannya pada setiap frame, dan menggambar mereka di posisi - posisi kamera. Posisi kamera akan selalu sama dengan posisi pemain Anda dalam hal ini.

Busa
sumber
Tentu saja jika objeknya adalah musuh, Anda tidak perlu mengulanginya, cukup tambahkan gerakan dunia ke mereka dalam metode pembaruan mereka.
SirYakalot
1
+1. Gunakan camera.setChaseEntity(player);untuk mencapai ini.
MartinTeeVarga
6

Saya selalu menggerakkan kamera dan akan merekomendasikannya - ada banyak alasan mengapa saya lebih suka ini, tetapi yang paling penting mungkin bermuara pada ini:

  1. Jika Anda menggerakkan kamera dan pemutar, itu hanya dua entitas yang perlu diperbarui untuk menggulir layar.

  2. Jika Anda memindahkan seluruh dunia setiap kali layar perlu digulir, itu mencakup sejumlah besar entitas yang tidak diketahui dan mungkin besar yang harus diperbarui.

David Gouveia
sumber
Saya setuju, tapi saya akan menambahkan bahwa hanya menambahkan garis + = 'gerakan dunia ke kelas musuh akan cukup sepele.
SirYakalot
@ AsherEinhorn Saya kira Anda berbicara tentang skenario seperti grafik adegan di mana setiap node berbagi transformasi orangtua dan hanya memindahkan simpul root (yaitu "dunia") akan menerjemahkan semuanya secara otomatis? Karena dalam setiap kasus lain, menggerakkan dunia menyiratkan menggerakkan segala sesuatu di dunia - yang merupakan poin dari posting saya.
David Gouveia
nah jika pergerakan dunia berbanding terbalik dengan pemain. yaitu - Anda bergerak maju, dunia bergerak kembali, maka Anda bisa saja - = gerakan pemain ke semua objek game. Saya setuju dengan Anda. Saya hanya mengatakan ada cara sepele untuk membuat keduanya bekerja.
SirYakalot
4

Benar-benar sepele, tidak benar-benar membuat perbedaan dari hal-hal yang telah Anda jelaskan.

Entah Anda memindahkan latar belakang melewati kamera dan pemain, atau Anda memindahkan pemain dan kamera bersamanya. Saya kira ada satu hal yang harus dilakukan jika Anda hanya memindahkan latar belakang.

Meskipun saya kira jika Anda memindahkan latar belakang Anda harus menjadi orang tua pickup dan musuh itu, yang sekali lagi, sepele tapi itu sesuatu untuk dipikirkan.

Secara pribadi saya akan memindahkan pemain karena saya hanya suka hal-hal yang harus dilakukan dengan cara yang lebih realistis.

SirYakalot
sumber
0

Jawaban lain baik, tetapi saya ingin menambahkan beberapa poin dari apa yang lebih baik, berharap dapat membantu seseorang yang mencoba membuat keputusan yang sama untuk proyek yang berbeda.

Memindahkan Player:

  • Sederhana, semuanya statis (ish), jadi secara sederhana, satu-satunya hal yang perlu Anda lakukan untuk memindahkan pemain adalah player.x += 5;(pseudocode).
  • Ini "Klik lebih baik" bagi kebanyakan orang. Ketika Anda memainkan permainan, Anda selalu berpikir bahwa pemain bergerak, bukan sebaliknya. Jadi lebih mudah untuk menganggapnya sebagai "Pemain harus bergerak, bukan dunia", yang pada gilirannya, dapat membuat seseorang lebih mudah untuk mengaturnya di kepala mereka.
  • Mudah dilacak di mana pemain berada (posisinya juga koordinatnya di peta)

Memindahkan Dunia:

  • Jika permainan Anda cukup besar, Anda tidak perlu khawatir meluap / meluap, dengan bergerak terlalu jauh dari pusat dunia, karena posisi pemain selalu sangat dekat 0.
  • Mirip dengan di atas, jika Anda mengacaukan perhitungan 3D, Anda tidak perlu khawatir tentang hasil yang tidak akurat dengan floating point, karena semua yang Anda lihat di layar harus cukup dekat 0.
  • Jika dilakukan dengan benar, Anda dapat membuat dunia "tak terbatas".
  • Harus melacak pemain secara manual, posisi pemain akan selalu bernilai kecil, yang menandakan posisi pemain di layar (agak), untuk mengetahui apakah pemain ada di kiri atas peta atau kanan bawah, Anda harus melacaknya dengan cara tertentu.

Pada akhirnya, itu tergantung pada proyek. Jika seseorang membuat klon Mario asli, menggerakkan dunia bisa jadi rumit, sementara menggerakkan pemain tidak benar-benar membuat banyak masalah. Namun, ingin membuat game dunia terbuka yang besar, mungkin lebih baik untuk memindahkan dunia.

TomTsagk
sumber