Tôi đã viết một lớp view_port chế biến tại nhà cho một trò chơi chiến lược 2D. Các panning (với các phím mũi tên) và phóng to (với bánh xe chuột) hoạt động tốt, nhưng tôi muốn nhìn vào cũng nhà đối với bất cứ nơi nào con trỏ được đặt, như trong Google Maps or Supreme CommanderPhóng to về phía chuột (ví dụ: các bản đồ của Google)
tôi sẽ tha cho bạn những chi tiết cụ thể về cách thu phóng được triển khai và thậm chí ngôn ngữ tôi đang sử dụng: tất cả điều này đều không liên quan. Điều quan trọng là chức năng zoom, điều chỉnh cấu trúc hình chữ nhật (x, y, w, h) đại diện cho khung nhìn. Cho đến nay các mã trông như thế này:
void zoom(float delta, float mouse_x, float mouse_y)
{
zoom += delta;
view.w = window.w/zoom;
view.h = window.h/zoom;
// view.x = ???
// view.y = ???
}
Trước khi ai đó gợi ý nó, sau đây sẽ không công việc:
view.x = mouse_x - view.w/2;
view.y = mouse_y - view.h/2;
bức tranh này minh họa tại sao, như tôi đã cố gắng để phóng to về phía khuôn mặt cười:
Như bạn có thể nhìn thấy khi các đối tượng bên dưới chuột được đặt trong t trung tâm của màn hình nó dừng lại dưới con chuột, vì vậy chúng tôi ngừng phóng to về phía nó!
Nếu bạn đã có một đầu cho toán học (bạn sẽ cần một) bất kỳ trợ giúp về điều này sẽ được đánh giá cao nhất!
Bạn có thể giải thích về ý nghĩa của các biến không? – WebF0x