Saya sedang mengerjakan game 2D sederhana. Saya telah menyelesaikan versi ponsel.
Namun, bos saya ingin game bekerja pada RT-nya. Saya melakukan "konversi" tetapi tombol saya ada di tempat yang salah, karena saya meng-hard-sod ukuran layar, seperti ini:
texture = game.Content.Load<Texture2D>("StartScreen");
mainFrame = new Rectangle(0, 0, game.GraphicsDevice.Viewport.Width, game.GraphicsDevice.Viewport.Height);
// button definitions
startbrect = new Rectangle(300, 258, 88, 88);
startbtext = game.Content.Load<Texture2D>("bplay");
Dalam contoh ini, mainframe
baik-baik saja, tetapi startbrect
tidak, karena saya menentukan ukuran agar sesuai dengan layar ponsel Windows. Bagaimana saya bisa menangani desain responsif ketika semua layar ponsel Windows 8 berbeda? Apakah ada rumus atau makro untuk menghitung setiap kali ukuran yang baik?
c#
2d
resolution
Gabson
sumber
sumber
Jawaban:
Saya menggunakan ukuran layar referensi, dan skala semuanya sesuai dengan itu, sambil menjaga rasio semuanya tetap sama.
Untuk memastikan permainan terlihat bagus pada resolusi dengan rasio yang jauh berbeda dari resolusi referensi Anda, tentukan "area yang dapat dimainkan", yang cocok dengan segala jenis layar, dan letakkan semua visual penting gameplay di sana. Isi semua yang ada di luarnya dengan latar belakang. Biasanya, area referensi yang dapat diputar saya sebesar ukuran layar referensi itu sendiri.
Pada orientasi potret, saya menghitung area yang dapat diputar (baru) sehingga layar diisi secara vertikal, dan ruang yang dibutuhkan secara horizontal sama besarnya dengan yang diperlukan untuk menjaga rasio. Pada orientasi lanskap, saya mengisi layar secara horizontal, dan menjaga rasio ketika mengatur ukuran vertikal.
Untuk lebih lanjut, lihat http://en.wikipedia.org/wiki/Safe_area_(television) karena konsepnya mirip, jika tidak identik.
sumber
Saya pikir pendekatan termudah dan paling alami untuk resolusi tata letak independen adalah skema (persentase) relatif. Jadi sejak awal tidak bekerja dengan resolusi nyata tetapi hanya dalam seragam [0,1] x [0,1] kuadrat sedapat mungkin.
Itu berarti bahwa untuk posisi diberikan
screen_size
dan posisi tertentuobject_size
dan diberikan(px, py)
(misalnya (0,5, 0,5) untuk pusat layar), sudut atas, kiri objek dihitung dengan:Idenya harus jelas. Abstraksi yang siap adalah
dan setiap posisi ditentukan kemudian oleh
(cxi, cyi)
. Dengan ini orang dapat menempatkan objek di sudut dengan atau tanpa batas, dll.Pastikan ukuran elemen tunggal (tombol, label, ...) juga diskalakan.
sumber
Khusus untuk MonoGame, saya memiliki solusi platform independen untuk masalah ini yang disebut IRR (Independent Resolution Renderer). Ini memiliki penggunaan yang sangat sederhana:
Buat IRR dalam metode Inisialisasi ()
_irr = ResolutionRenderer baru (ini, VirtualResolutionWidth, VirtualResolutionHeight, _gfx.PreferredBackBufferWidth, _gfx.PreferredBackBufferHeight);
Deskripsi ada di sini: http://panthernet.ru/forum/index.php?/topic/17-monogamexna-examples-v14/?p=44
Kode ada di sini: https://github.com/panthernet/Monogame-Examples
sumber