Tất cả đều tương đối. Thực sự, bạn luôn chuyển đổi quan điểm của mình so với vị trí người chơi cố định.
Vì vậy, bây giờ hãy quên màn hình, giả sử bạn có 3 bước này (thể hiện các vị trí khi chúng cập nhật trên mỗi vòng lặp trò chơi):
playerWorldPosition = 50, 100; objectWorldPosition = 60, 200;
playerWorldPosition = 55, 110; objectWorldPosition = 60, 160;
playerWorldPosition = 60, 120; objectWorldPosition = 60, 120;
(như x, y trong mỗi trường hợp)
Như bạn có thể thấy, người chơi đang bay lên hoặc nhảy lên và di chuyển nhẹ sang phải, trong khi vật thể (có thể là một sức mạnh) đang rơi thẳng xuống. Người chơi bắt được powerup. Bây giờ làm thế nào để bạn vẽ này trên màn hình?
Đầu tiên, giả sử bạn muốn trình phát của mình ở giữa màn hình mọi lúc. Vì vậy, chế độ xem khóa cho người chơi - đây là cách tiếp cận đơn giản nhất để hình dung. Vị trí của người chơi của bạn sau đó sẽ luôn luôn là screenCentre
(tức là screenWidth/2, screenHeight/2
). Làm thế nào để bạn có được vị trí trên màn hình của các đối tượng khác trên thế giới?
objectScreenPosition = (objectWorldPosition - playerWorldPosition) + screenCentre;
Bạn có thể thấy rằng công thức này hoạt động ngay cả đối với người chơi thực tế, vì (playerWorldPosition- playerWorldPosition) + screenCentre
bằng screenCentre
. Vì vậy, bạn có thể áp dụng cùng một công thức cho từng thực thể trong trò chơi của mình, chạy qua một danh sách. Bạn có thể sử dụng phương pháp đơn giản này để xây dựng cho những thứ khác (như độ trễ của camera, trường hợp bạn đang ở trong một góc của cấp độ, v.v.)