Itu semua relatif. Sungguh, Anda selalu mengubah tampilan Anda relatif terhadap posisi pemain tetap Anda.
Jadi, lupakan layar untuk saat ini, katakanlah Anda memiliki 3 langkah ini (mewakili posisi saat diperbarui pada setiap loop game):
playerWorldPosition = 50, 100; objectWorldPosition = 60, 200;
playerWorldPosition = 55, 110; objectWorldPosition = 60, 160;
playerWorldPosition = 60, 120; objectWorldPosition = 60, 120;
(seperti x, y dalam setiap kasus)
Seperti yang Anda lihat, pemain terbang ke atas atau melompat dan bergerak sedikit ke kanan, sedangkan objek (bisa menjadi powerup) jatuh lurus ke bawah. Pemain menangkap powerup. Sekarang bagaimana Anda menggambar ini di layar?
Pertama, anggaplah Anda ingin pemain Anda berada di tengah layar setiap saat. Jadi tampilan terkunci untuk pemain - ini adalah pendekatan paling sederhana untuk memvisualisasikan. Posisi pemain Anda akan selalu screenCentre
(yaitu screenWidth/2, screenHeight/2
). Lalu bagaimana Anda mendapatkan posisi layar dari objek lain di dunia?
objectScreenPosition = (objectWorldPosition - playerWorldPosition) + screenCentre;
Anda dapat melihat bahwa rumus ini berfungsi bahkan untuk pemain yang sebenarnya, karena (playerWorldPosition- playerWorldPosition) + screenCentre
sama dengan screenCentre
. Jadi, Anda bisa menerapkan rumus yang sama untuk setiap entitas di game Anda, berjalan melalui daftar. Anda dapat menggunakan pendekatan sederhana ini untuk membangun hal-hal lain (seperti jeda kamera, kasus di mana Anda berada di sudut level, dll.)