我尝试使用对齐网格创建块放置。一切正常,在我脑海中这应该更新鼠标相对于窗口每一帧的位置吗?
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轴也是如此。
我希望有意义
答案 0 :(得分:3)
您需要致电window.mapPixelToCoords()
将像素位置转换为视图的坐标系。
sf::Vector2i pixel_pos = sf::Mouse::getPosition(window.mywindow);
sf::Vector2f coord_pos = window.mywindow.mapPixelToCoords(pixel_pos);
作为一般建议:不要使用公共类成员 - mywindow
和playerSprite
不应该从外部访问。