c++ - SFML 中屏幕滚动时的鼠标位置

标签 c++ grid scroll mouse sfml

我正在尝试创建一个与网格对齐的 block 放置。一切正常,在我看来,这应该会在每一帧更新鼠标相对于窗口的位置,对吗?

sf::Vector2i position = sf::Mouse::getPosition(window.mywindow);

//get position
int xSnap = (position.x / gridWidth) * gridWidth;
int ySnap = (position.y / gridHeight) * gridHeight;

但我也有屏幕滚动使用

if (player.playerSprite.getPosition().x + 16 > screenDimensions.x / 2)
        position.x = player.playerSprite.getPosition().x + 16;
    else
        position.x = screenDimensions.x / 2;

    //Y
    if (player.playerSprite.getPosition().y + 16 > screenDimensions.y / 2)
        position.y = player.playerSprite.getPosition().y + 16;
    else
        position.y = screenDimensions.y / 2;

当屏幕从其原始位置向任一方向滚动时,它不会更新鼠标位置,例如,假设窗口大小为 800x600,在该 800x600 窗口内该位置工作正常,但假设我的 Sprite 向右移动 200 像素(当 Sprite 到达屏幕中间时它开始滚动)超过原始位置,然后使用此代码放置的对象出现在鼠标左侧 200 像素处。 y 轴也是如此。

我希望这是有道理的

最佳答案

您需要调用 window.mapPixelToCoords() 将像素位置转换为 View 的坐标系。

sf::Vector2i pixel_pos = sf::Mouse::getPosition(window.mywindow);
sf::Vector2f coord_pos = window.mywindow.mapPixelToCoords(pixel_pos);

作为一般建议:不要使用公共(public)类成员 - mywindowplayerSprite 不应从外部访问。

关于c++ - SFML 中屏幕滚动时的鼠标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21554023/

相关文章:

c++ - 由于 LAPACK,使用 OpenMP 的程序速度较慢

html - 使用视口(viewport)动态调整 3x3 正方形网格的大小

angular - Kendo Grid Persist State 破坏了可编辑的弹出窗口功能

windows - 鼠标滚轮事件

c++ - Qt 5 dds 支持以节省内存并改善渲染

c++ - 使用空大括号初始化程序 : pointer or reference? 的重载分辨率

c++ - 我如何使用 QFtp::put 在 Qt C++ 中上传文件?

c# - wpf - 测量实际宽度和实际高度

javascript - jQuery scrollLeft 不适用于 Angular

ruby-on-rails - 在 Rails 中渲染后向下滚动页面