Saya mengosongkan yang satu ini. Tentu saja, saya dapat memasang hal-hal di tepi, yang akan membuat resolusi UI saya independen ... sampai sangat berubah sehingga grafiknya terlalu kecil. Bagaimana saya mengukur secara tepat kapan saja diperlukan? Bagaimana cara menjaga grafik saya pada proporsi yang tepat saat penskalaan? Saya tidak ingin mereka membentang jika resolusi memiliki proporsi yang berbeda seperti 16:10 yang bertentangan dengan apa pun.
Apakah ada pendekatan yang benar dan teruji untuk ini? Pemutar video menunjukkan batas hitam karena masalah ini, apakah ini tidak dapat dipecahkan dengan benar?
xna
resolution
Blub
sumber
sumber
Jawaban:
Pertama-tama perlu diingat bahwa dengan rasterisasi secara teknis tidak ada yang namanya kemerdekaan resolusi sejati. Dengan perbesaran yang cukup tinggi, masing-masing texels akan mulai terlihat. Satu-satunya solusi untuk ini adalah menulis sistem grafik vektor.
Yang sedang dikatakan ada beberapa langkah untuk menciptakan sistem independen resolusi berbasis raster yang kuat: ukuran, sistem koordinat, dan tata letak.
Untuk mengukur dan memposisikan kita perlu menggunakan beberapa set unit yang mempertahankan rasio terhadap resolusi aplikasi yang sebenarnya. Dalam hal ini mari kita gunakan inci karena saya orang Amerika dan Anda dapat skala elemen dengan DPI (titik per inci). Misalnya, aplikasi Anda berjalan pada 800x600. Default Windows DPI adalah 96 sehingga itu berarti aplikasi memiliki resolusi (800/96) x (600/96) inci atau 8,33x6,25 inci.
Karena Anda harus dapat bekerja dengan, paling tidak, rasio aspek 4: 3 dan 16: 9 bagaimana Anda menangani sistem koordinat layar Anda menjadi sedikit rumit. Apa yang saya sarankan lakukan adalah meletakkan (0,0) di tengah area tampilan (serta jendela dan kontrol). Ini bekerja dengan baik karena jika Anda meletakkan (0,0) di sudut maka ketika sudut itu bergerak berdasarkan resolusi dan rasio aspek itu akan menerjemahkan semua sprite Anda sedangkan pusat layar akan selalu menjadi pusat layar tidak masalah perangkat. Melanjutkan contoh kita dengan 800x600 ini akan menghasilkan sistem koordinat yang (kiri ke kanan) -4,165in menjadi 4,165in dan (atas ke bawah) 3,125in hingga -3,125in.
Jadi pada saat ini Anda memiliki sistem UI independen DPI dengan item yang akan selalu berada di tempat yang sama relatif terhadap pusat layar - tidak cukup resolusi independen. Untungnya, apa yang memungkinkan Anda melakukan DPI adalah skala UI dengan skala DPI berdasarkan beberapa heuristik. Misalnya kita dapat skala DPI menggunakan resolusi vertikal sebagai heuristik kami. Jika 800x600 adalah 96 DPI maka kami akan menggunakan 123 DPI untuk 1024x768 atau 115 DPI untuk 1280x720.
Terakhir Anda perlu membangun sistem tata letak yang menangani posisi absolut maupun posisi relatif. Contoh terbaik dari ini adalah WPF dan web. Anda dapat menentukan bahwa kontrol / kotak mengisi beberapa% dari elemen induk sambil memasukannya ke tepi bersama dengan banyak opsi tata letak otomatis lainnya yang berguna. Semua ini bersama-sama akan menghasilkan sistem UI yang mampu terlihat hampir sama di banyak resolusi dan rasio aspek yang berbeda.
Untuk meringkas, saya sangat menyarankan Anda mempelajari WPF karena hampir semua ini dilakukan kecuali itu mempertahankan asal di sistem koordinat sudut kiri atas dan tidak secara otomatis skala DPI berdasarkan resolusi vertikal.
sumber
Umumnya yang ingin Anda lakukan tergantung pada gim.
Salah satu opsi adalah memiliki batas hitam jika rasio aspek (proporsi) berbeda (mungkin paling mudah, hanya render ke tekstur, lalu render ke layar, ubah ukurannya sesuai).
Pilihan lain adalah memiliki jalur render yang berbeda untuk rasio aspek yang berbeda. Anda dapat memiliki satu untuk layar lebar, satu untuk 'normal'.
Namun pilihan lain adalah untuk skala hal secara terpisah, misalnya membuat kotak pesan UI lebih besar atau lebih kecil tergantung pada resolusi. Setiap kali Anda perlu menentukan tempat untuk menggambar, alih-alih menggunakan piksel yang tepat, lakukan hal-hal seperti 0,2 ke bawah, 0,8 melintasi, lebar 0,1, tinggi 0,3. Sangat sering dalam hal ini Anda akan mendapatkan peregangan hal-hal, meskipun tergantung pada bagaimana Anda menggambar hal-hal yang bisa baik-baik saja (yaitu meregangkan latar belakang UI, tetapi bukan teks).
Dalam hal 3D, selama Anda mengatur viewport dengan benar, Anda harus berakhir dengan pemain layar lebar yang bisa melihat sedikit lebih banyak daripada pengaturan non-layar lebar. (Atau gambarkan batas hitam / atau regangkan tampilan).
sumber