我试图用snap to grid创建一个块放置.一切正常,在我脑海中这应该更新鼠标相对于窗口每一帧的位置吗?
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;
当屏幕从其原始位置向任一方向滚动时,它不会更新鼠标位置,例如,假设窗口大小为800×600,在800×600窗口内,位置工作正常,但让我的精灵向右移动200px(它开始滚动当精灵到达屏幕的中间时)超过原始位置,使用此代码放置的对象然后出现在鼠标左侧200px. y轴也是如此.
我希望有道理
解决方法:
您需要调用window.mapPixelToCoords()将像素位置转换为视图的坐标系.
sf::Vector2i pixel_pos = sf::Mouse::getPosition(window.mywindow);
sf::Vector2f coord_pos = window.mywindow.mapPixelToCoords(pixel_pos);
作为一般建议:不要使用公共类成员 – 不能从外部访问mywindow和playerSprite.
标签:sfml,c,scroll,mouse,grid 来源: https://codeday.me/bug/20191007/1867801.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。