再一次,相机在2D平面上进行缩放。我搜索了很多,并且知道有类似的问题,但我显然太愚蠢了,无法运用我能找到的东西。
基本上我将所有元素的距离乘以mouseDelta
乘以double
,它是0.5和1之间的camX
。适用于所有元素,但是因为相机的锚点({{ 1}},camY
)是摄像机的左上角,凸轮焦点中的对象相对于焦点改变其位置。我想滚动“朝向”焦点。这是我得到的,但它的表现非常奇怪:
camX和camY是凸轮左上角的坐标。 mouseDelta是全局存储的缩放级别,由每个wheel-event更改。 screenX是屏幕/窗口的宽度(无论如何全屏) screenY是屏幕/窗口的高度
if (newEvent.type == sf::Event::MouseWheelMoved) //zoom
{
mouseDelta += ((double)newEvent.mouseWheel.delta)/20;
if (mouseDelta > 1) { mouseDelta = 1; }
else if (mouseDelta < 0.5) { mouseDelta = 0.5; }
//resize graphics
for (int i = 0; i < core->universe->world->nodes.size(); i++) {
core->universe->world->nodes.at(i).pic->setSize(mouseDelta);
}
for (int i = 0; i < core->universe->world->links.size(); i++) {
core->universe->world->links.at(i).pic->setSize(mouseDelta);
}
camX = (camX + screenX/2) - (camX + screenX/2)*mouseDelta;
camY = (camY + screenY/2) - (camY + screenY/2)*mouseDelta;
}