我写了一个自制的view_port类,用于2D策略游戏。使用箭头键进行平移和鼠标滚轮进行缩放都能正常工作,但是我希望视图也能像Google Maps 或Supreme Commander一样,根据光标位置回到初始位置。
我会省略掉缩放实现的具体细节以及我使用的编程语言:这些都不重要。重要的是缩放函数,它修改代表视图的矩形结构(x,y,w,h)。目前代码看起来是这样的:
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 = ???
}
在有人建议之前,以下方法不会奏效:
view.x = mouse_x - view.w/2;
view.y = mouse_y - view.h/2;
这张图片说明了,当我试图放大笑脸时的原因:
你可以看到,当鼠标下方的对象位于屏幕中心时,它就不再在鼠标下方,因此我们停止向其缩放!
如果你对数学有一定的了解(你需要),欢迎提供任何帮助!