Saya membuat game yang mirip dengan Legend of Zelda: Tautan ke Masa Lalu (petualangan aksi 2D top-down). Saya ingin karakter tetap terpusat di layar ketika dia bergerak.
Saat ini, setiap kali pemain ingin bergerak, saya memindahkan semua peta ke arah yang berlawanan. Ini berfungsi, tetapi saat saya menambahkan lebih banyak objek ke dunia, memindahkan semuanya menjadi lebih rumit.
Apakah ada cara yang lebih baik untuk mendekati ini?
Jawaban:
Cara khas menangani ini adalah dengan membuat objek kamera. Bentuk kamera yang paling sederhana hanyalah posisi. Kamera sederhana ini mendefinisikan "pusat" dari tampilan saat ini. Jadi Anda tidak mengubah semua posisi ubin / entitas Anda, Anda cukup kurangi koordinat kamera dari posisi saat menggambar. Dalam situasi ini, kamera tidak "bergerak".
Meskipun kamera dan karakter Anda akan berbagi posisi sebagian besar waktu, Anda mungkin masih ingin memilikinya sebagai nilai yang terpisah, sehingga Anda dapat, misalnya, menghentikan kamera dari bergerak ketika mencapai akhir dunia, tetapi biarkan pemain untuk terus bergerak.
Kamera yang sedikit lebih maju memang bergerak. Semua entitas dan ubin digambar tanpa offset dan posisi dari mana Anda membuat perubahan. Ini sangat mirip dengan kamera paling dasar, dan Anda masih dapat melakukan banyak optimasi yang sama untuk rendering selektif (hanya memanggil
draw
apa yang dapat dilihat kamera), pada keduanya. Ini pada dasarnya hanya cara berpikir yang berbeda tentang hal itu.sumber
cam variables
... dan menawarkan metode alternatif ... stackoverflow.com/questions/18199373/…Tidak, ini cara yang salah untuk melakukannya.
Bagaimana Anda akan melakukan deteksi perangkap? Bagaimana dengan saat pemain mencapai tepi dinding? Apakah sistem penglihatan Anda berfungsi untuk ruang bawah tanah atau Anda harus menulis ulang sebagian besar kode?
Dunia adalah geometri. Pemain itu geometri. Dunia tidak bergerak. Pemain melakukannya. Atur posisi kamera ke tengah pada pemain. Selalu . Dan hanya itu yang ada untuk itu.
Jangan mencoba dan membiasakan diri dengan "oh jika saya menggeser dunia, maka itu akan memberikan penampilan pemain bergerak". Anda hanya akan memperumit matematika dengan sistem koordinat aneh pada akhir hari.
Memang benar bahwa rendering OpenGL sebenarnya bekerja dengan "memperbaiki kamera untuk menunjuk ke bawah - z, dan mengubah dan memutar semua geometri dunia sehingga sesuai dengan volume tampilan kanonik", tetapi Anda tidak seharusnya berpikir seperti itu saat pemrograman .
gluLookAt
memiliki parameter bernamaeye
,,look
danup
karena suatu alasan - sehingga Anda dapat berpikir dalam hal sistem koordinat yang masuk akal.sumber