我在 Windows 上使用 C++ 中的 SFML,当我放大或缩小时,它不会单击鼠标下方的单元格

问题描述 投票:0回答:1

这是一个生命游戏,所以有一个方格网格。我这样做了,我们可以通过单击单元格(左键单击)在网格上绘图。此外(在视图中)您可以通过右键单击从一侧移动到另一侧并放大和缩小。我确实找到了如何通过改变鼠标坐标与距离差来解决滑动的位置问题,但我找不到如何解决滚动的问题。 不过,滑动和缩放系统本身工作得很好。只是鼠标下方的位置不正确。

我尝试像滑动的东西一样做,但我们没有距离差异可以处理。起初我以为我不需要对坐标进行更改,只需在屏幕或视图模式下转换它们即可,但它不起作用。 我搜索并尝试了很多东西,但从未找到如何做到这一点。

case sf::Event::MouseWheelMoved:
    movingView.zoom(1.f + event.mouseWheel.delta * 0.1f);
mouse = sf::Mouse::getPosition(window);
viewMouse = window.mapPixelToCoords(mouse);

if (event.mouseButton.button == sf::Mouse::Right)
{
     lastMouse = mouse;
     center += moveDiff;
     rightClickPressed = true;
}

if (rightClickPressed)
{
     moveDiff = (sf::Vector2f)(lastMouse - mouse);
                movingView.setCenter(sf::Vector2f(center + moveDiff));
}
if (leftClickPressed)
{
     viewMouse += movingView.getCenter() - movingView.getSize() / 2.f;
     gameOfLife.clickCell(viewMouse, E_pressed);
}
c++ windows view position sfml
1个回答
0
投票

好吧,我找到了解决方案,我猜唯一我没有尝试过的...... 只需要从屏幕转换到具有正确视图的世界

window.mapPixelToCoords(mouse, movingView);
© www.soinside.com 2019 - 2024. All rights reserved.