C++ 在SFML中滚动屏幕的鼠标位置

C++ 在SFML中滚动屏幕的鼠标位置,c++,grid,scroll,mouse,sfml,C++,Grid,Scroll,Mouse,Sfml,我正在尝试使用“捕捉到栅格”创建块放置。一切正常,在我的脑海中,这应该会更新鼠标相对于窗口的位置,对吗 sf::Vector2i position = sf::Mouse::getPosition(window.mywindow); //get position int xSnap = (position.x / gridWidth) * gridWidth; int ySnap = (position.y / gridHeight) * gridHeight; 但我也有屏幕滚动使用 if

我正在尝试使用“捕捉到栅格”创建块放置。一切正常,在我的脑海中,这应该会更新鼠标相对于窗口的位置,对吗

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窗口内,位置工作正常,但假设我的精灵向右移动200px(当精灵到达屏幕中间时开始滚动)超过原始位置,然后,使用此代码放置的对象以200px的速度显示在鼠标左侧。y轴也是如此


我希望这有意义

您需要调用
window.mappixeltoords()
将像素位置转换为视图的坐标系

sf::Vector2i pixel\u pos=sf::Mouse::getPosition(window.mywindow);
sf::Vector2f-coord\u-pos=window.mywindow.mapPixelToCoords(pixel\u-pos);

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

您需要调用
window.mappixeltoords()
将像素位置转换为视图的坐标系

sf::Vector2i pixel\u pos=sf::Mouse::getPosition(window.mywindow);
sf::Vector2f-coord\u-pos=window.mywindow.mapPixelToCoords(pixel\u-pos);

作为一般建议:不要使用公共类成员-
mywindow
playerSprite
不应该从外部访问。

问题是什么?问题是什么?谢谢,这似乎是可行的,但是我不再使用snap-to-grid函数,它只是跟随鼠标移动,而不是捕捉。你知道为什么吗?很可能是因为
位置
不是
sf::Vector2
,因此该除法将是一个
浮点
除法,并且最终结果将仅在赋值时铸造(带有警告)。您可能需要使用
static\u cast(position.x)
。我还建议您使用向量,而不是两个x和y变量。谢谢,这似乎是可行的,但是我不再使用“捕捉到网格”功能,它只是跟随鼠标移动,而不是捕捉。你知道为什么吗?很可能是因为
位置
不是
sf::Vector2
,因此该除法将是一个
浮点
除法,并且最终结果将仅在赋值时铸造(带有警告)。您可能需要使用
static\u cast(position.x)
。我还建议您使用向量,而不是两个x和y变量。