Menyusul dari pertanyaan rasio aspek , saya tertarik untuk mendengar apa yang orang lain gunakan ketika bekerja pada sistem UI 2D (kemungkinan besar solusi buatan sendiri). Secara khusus, bagaimana Anda menangani sistem koordinat. Menurut saya ada tiga pilihan:
- Koordinat dengan kode keras (mis .: 0 -> 720, 0 -> 576)
- Koordinat yang dinormalisasi (0,0 -> 1,0, 0,0 -> 1,0), dipetakan ke dalam koordinat nyata sebelum rendering
- Koordinat virtual (mis: 0 -> 1600, 0 -> 1000), dipetakan ke dalam koordinat nyata sebelum dirender
Hard-coded jelas hanya berguna jika Anda berada di platform tetap dan tahu apa koordinat ruang layar Anda di muka, atau jika Anda siap untuk membuat layout layar untuk setiap set dimensi layar yang mungkin.
Koordinat yang dinormalisasi bagus, tetapi menderita ambiguitas ketika rasio aspek layar tidak diperbaiki (mis. 0,75 peta ke koordinat fisik yang berbeda saat berjalan di layar lebar daripada di 4: 3). Juga, bagi penulis, itu benar-benar berlawanan dengan intuisi untuk menyatakan elemen UI menjadi (0,2 x 0,2), hanya untuk menemukan itu tidak benar-benar persegi ketika dirender.
Koordinat virtual tidak ambigu, tetapi mengalami masalah yang sama dengan koordinat yang dinormalisasi pada tahap pembuatan ulang: perbedaan desimal kecil dapat mengakibatkan kesalahan off-by-one yang berarti bahwa elemen UI yang seharusnya ubin sekarang memiliki celah di antara mereka.
Demikian pula, ketika Anda memiliki layar resolusi tetap, baik koordinat dinormalisasi maupun virtual berarti sangat sulit untuk menjamin pemetaan 1: 1 antara piksel yang dibuat dengan baik oleh artis Anda di gambar UI, dan piksel di layar, yang berarti Anda menanggung risiko artefak penskalaan jahat (dengan anggapan Anda merender sebagai paha depan bertekstur di layar).
Kami telah menggunakan pendekatan koordinasi virtual, khususnya untuk menghindari ambiguitas tentang rasio aspek. Jadi ketika merender ke layar 16:10, ruang UI adalah (0,0) -> (1600,1000), tetapi ketika merender ke 4: 3, ruang UI yang dapat digunakan sebenarnya (133,0) -> (1467 , 0).
Apakah ada solusi yang lebih baik yang tidak saya sadari? Apakah ada strategi yang baik untuk meminimalkan masalah yang dimiliki ketiga pendekatan ini?
Banyak hal tergantung pada jenis permainan dan situasinya. Untuk prototipe cepat dan kotor, saya lebih suka merencanakan UI pada kertas grafik, menuliskan daftar koordinat numerik untuk ukuran jendela tetap, dan meng-hardcode semuanya - lebih mudah dan lebih cepat bagi saya. Tetapi untuk proyek "nyata" di mana Anda ingin ukuran jendela resizable atau resolusi layar alternatif, itu jelas tidak ideal, dan beberapa jenis solusi yang memungkinkan untuk penskalaan di kedua arah akan lebih baik.
sumber