user-interface - 向鼠标缩放(例如谷歌地图)

标签 user-interface scroll mouse zooming

我为 2D 策略游戏编写了一个自制的 view_port 类。平移(使用箭头键)和缩放(使用鼠标滚轮)工作正​​常,但我希望 View 也能回到光标所在的位置,如 Google Maps or Supreme Commander

我不会告诉你缩放是如何实现的细节,甚至我使用的是什么语言:这都是无关紧要的。重要的是缩放功能,它修改了代 TableView 的矩形结构(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;

这张照片说明了为什么,当我试图放大笑脸时:

http://oi43.tinypic.com/16m21au.jpg

正如您所看到的,当鼠标下方的对象放置在屏幕中央时,它不再位于鼠标下方,因此我们停止向其缩放!

如果你有数学头脑(你需要一个),任何帮助都将不胜感激!

最佳答案

我设法找到了解决方案,这要归功于很多令人头疼的小图片:我会在这里发布算法以防其他人需要它。

Vect2f mouse_true(mouse_position.x/zoom + view.x, mouse_position.y/zoom + view.y);
Vect2f mouse_relative(window_size.x/mouse_pos.x, window_size.y/mouse_pos.y);   
view.x = mouse_true.x - view.w/mouse_relative.x;
view.y = mouse_true.y - view.h/mouse_relative.y;

这可确保放置在鼠标下方的对象停留在鼠标下方。您可以在 github 上查看代码,我还为 youtube 做了一个展示演示.

关于user-interface - 向鼠标缩放(例如谷歌地图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592115/

相关文章:

objective-c - 在 NSTableView 中禁用滚动

android - 在 Android 中像 Marquee 一样滚动 TextView

java - 自动向下滚动 TextArea

c# - 如何为鼠标创建一个控件 "transparent"或将MouseMove事件路由到父级?

带有重叠 PNG 图像的 jQuery Draggable

java - 让你的 JFrame 成为静态变量是不是很糟糕? ( java Swing )

c++ - 如何使用 C/C++ 操作 Linux 上的应用程序窗口

Python Tkinter 按钮相距很远

visual-studio - 在 Visual Studio 2008 中分配鼠标按钮

perl - 如何使用鼠标委托(delegate)数组的第一个元素?