Dalam gim 2D gulir, haruskah benda bergerak atau haruskah kamera bergerak?


8

Saya baru mengenal desain game dan tidak benar-benar tahu bagaimana hal-hal dilakukan. Saya sedang berpikir untuk membangun game iOS di mana sebuah kapal harus terbang setinggi mungkin (pada kecepatan variabel), mengumpulkan power up, dan sebagainya, di jalan.

Apa cara pergi ke sini? Haruskah latar belakang dan item digulir ke bawah dari atas atau haruskah kapal benar-benar terbang menggerakkan pandangan bersamanya?


Satu-satunya jawaban yang benar adalah 'keduanya'.
Blecki

Jawaban:


6

Itu semua relatif. Sungguh, Anda selalu mengubah tampilan Anda relatif terhadap posisi pemain tetap Anda.

Jadi, lupakan layar untuk saat ini, katakanlah Anda memiliki 3 langkah ini (mewakili posisi saat diperbarui pada setiap loop game):

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

(seperti x, y dalam setiap kasus)

Seperti yang Anda lihat, pemain terbang ke atas atau melompat dan bergerak sedikit ke kanan, sedangkan objek (bisa menjadi powerup) jatuh lurus ke bawah. Pemain menangkap powerup. Sekarang bagaimana Anda menggambar ini di layar?

Pertama, anggaplah Anda ingin pemain Anda berada di tengah layar setiap saat. Jadi tampilan terkunci untuk pemain - ini adalah pendekatan paling sederhana untuk memvisualisasikan. Posisi pemain Anda akan selalu screenCentre(yaitu screenWidth/2, screenHeight/2). Lalu bagaimana Anda mendapatkan posisi layar dari objek lain di dunia?

objectScreenPosition = (objectWorldPosition - playerWorldPosition) + screenCentre;

Anda dapat melihat bahwa rumus ini berfungsi bahkan untuk pemain yang sebenarnya, karena (playerWorldPosition- playerWorldPosition) + screenCentresama dengan screenCentre. Jadi, Anda bisa menerapkan rumus yang sama untuk setiap entitas di game Anda, berjalan melalui daftar. Anda dapat menggunakan pendekatan sederhana ini untuk membangun hal-hal lain (seperti jeda kamera, kasus di mana Anda berada di sudut level, dll.)


Dan bagaimana jika ada nol atau banyak objek pemain? Bagaimana jika Anda ingin melakukan efek khusus seperti goyangan kamera? Bahkan jika matematika terlihat sama, itu benar-benar bukan hal yang sama. Dan itu bukan satu atau yang lain. Objek bergerak, dan kamera juga bergerak.
Blecki

1
@Blecki ... Anda bilang, setelah jawabannya diterima. Jika Anda benar-benar berpikir mereka sangat berbeda, Anda pasti kesulitan mengatur pandangan Anda. Pergi tulis jawaban singkat Anda sendiri tentang transformasi tampilan yang berkaitan dengan semua kasus sudut, lalu. Tidak ada yang menghentikan Anda.
Insinyur

Anda memiliki kamera, ia memiliki posisi, Anda membuat matriks tampilan. Tidak ada kasing sudut.
Blecki

1
@Blecki Sekarang kamu menentang dirimu sendiri. "Bagaimana jika kamu ingin melakukan efek khusus seperti goyangan kamera?"
Insinyur

1
@Blecki. Benar. Senang kita sepakat.
Insinyur
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.