Saya seorang pemula mutlak dengan pemrograman game, haruskah pertanyaan ini dirumuskan dengan buruk, sadarlah itu bukan kecerobohan di pihak saya, tetapi kurangnya pengalaman pemrograman game.
Gim yang saya rencanakan untuk dikodekan akan menggunakan peta 2D top-down sebagai "dunia". Dunia mungkin lebih besar dari jendela (jendela dapat memperbesar atau memperkecil) dan kendaraan dapat ditemukan di titik mana pun di dunia (= ini bukan peta ubin, ruangnya "kontinu").
Untuk mengklarifikasi dengan sebuah contoh: jika dunia adalah medan 1000x1000 meter, sebuah kendaraan bisa berada di lokasi (327,31, 720,4) meter.
Pertanyaan saya adalah: apa cara yang paling nyaman untuk mewakili dunia secara internal? Saya bisa memikirkan kemungkinan-kemungkinan ini:
- tidak melakukan apa pun dan menggunakan meter seolah-olah saya bekerja dengan benda fisik,
- normalisasi ke piksel mendefinisikan ukuran dunia sebagai jumlah piksel untuk mewakili 1000 meter pada zoom maksimum,
- normalisasikan ke 1 mendefinisikan kata sebagai kuadrat ukuran 1
... tapi saya yakin mungkin ada beberapa yang lain / beberapa milik saya tidak masuk akal. Hanya saja menjadi game pertama saya, saya tidak memiliki gambaran yang jelas tentang masalah di depan saya, dan saya ingin beberapa panduan dalam membuat pilihan awal yang cukup benar.
Terima kasih atas waktu Anda.
Jawaban:
Saya setuju dengan menggunakan nilai dunia nyata (meter, kaki, dll.) Sebagai dasar jarak Anda. Masalah dengan dua saran Anda yang lain adalah keduanya merupakan variabel. Bekerja dengan ukuran dunia
1
akan menyebabkan semua aritmatika Anda menjadi floating-point antara -1 dan 1, yang dapat menyebabkan lebih banyak kesalahan floating-point. Juga, jika Anda pernah memutuskan untuk membuat ukuran dunia variabel (dunia "Besar" untuk game yang lebih lama, dll.) Anda akan memperkenalkan banyak masalah pada kode Anda. Demikian juga, jika Anda menggunakan piksel, bahkan pada level zoom maksimum / minimum, Anda akan mengalami kebingungan serta masalah jika Anda memutuskan untuk menambah atau mengurangi level zoom.sumber
Dari tiga opsi yang Anda sarankan, menggunakan meteran mungkin akan menjadi yang terbaik. Saat Anda membuat data lain, berurusan dengan panjang dalam meter akan membuat hidup Anda jauh lebih mudah. Di antara alasan lain, Anda dapat memutuskan untuk mengubah ukuran dunia Anda, atau level yang berbeda mungkin membutuhkan peta dengan ukuran berbeda.
Anda juga dapat memutuskan untuk menggunakan kaki (atau mungkin inci). Bagian dari keputusan ini mungkin tergantung pada paket middleware apa yang Anda gunakan - beberapa mesin fisika lebih suka satu jenis unit atau yang lain (meskipun hampir selalu dapat dikonfigurasi). Untuk sebagian besar, Anda bisa memilih unit dan pergi dengannya.
sumber
Normalisasi ke '1' benar-benar bukan cara untuk pergi (bagaimana jika Anda memiliki dunia yang tidak persegi? Atau beberapa dunia dengan ukuran yang berbeda ...).
Menggunakan piksel sebagai ... TIDAK PERNAH Gabungkan gameplay dan ukuran grafik !! Jangan mengunci diri sehingga Anda tidak dapat mengubah gambar tanpa harus mengubah kode.
Jadi meter (kaki atau pengukuran apa pun yang paling Anda sukai) adalah cara untuk melakukannya. Anda akan merasa jauh lebih baik untuk mengkodekan peluncur rudal Anda untuk bergerak dengan kecepatan 50 km / jam daripada 0,00076 unit / detik ...
sumber