C++ 将精灵放置在(0,0)位置会使精灵离开屏幕几像素
当我将精灵放置在0,0(屏幕左上角)时,它不会显示。它离屏幕几像素远。这是我的代码示例C++ 将精灵放置在(0,0)位置会使精灵离开屏幕几像素,c++,sfml,C++,Sfml,当我将精灵放置在0,0(屏幕左上角)时,它不会显示。它离屏幕几像素远。这是我的代码示例 Sprite s; Texture t; t.loadFromFile("Tiles.png"); t.setSmooth(false); s.setTexture(t); s.setTextureRect(IntRect(0, 0, 16, 16)); s.setPosition(0, 0); window.draw(s); window.display(); 如果我加上 Style::None
Sprite s;
Texture t;
t.loadFromFile("Tiles.png");
t.setSmooth(false);
s.setTexture(t);
s.setTextureRect(IntRect(0, 0, 16, 16));
s.setPosition(0, 0);
window.draw(s);
window.display();
如果我加上
Style::None
在我的RenderWindow中,精灵正确地定位在屏幕的左上角
有没有一种方法可以忽略windows标题栏来定位精灵?还是用另一种方法来解决这个问题?唯一能让精灵正确定位的方法是,我猜它的像素数,然后手动添加一个偏移量到精灵的位置,但这是一个非常糟糕的方法,我不能让它完全定位。如果我将位置设置为(11,64),精灵大约位于屏幕的左上角
编辑:下面是我用来重新创建问题的完整代码示例:
#include <SFML/Graphics.hpp>
using namespace sf;
const int WIDTH = 1000;
const int HEIGHT = 1000;
int main()
{
RenderWindow window(VideoMode(WIDTH, HEIGHT), "Window", Style::Titlebar | Style::Close);
RectangleShape square(Vector2f(100.f, 100.f));
square.setFillColor(Color::Red);
square.setPosition(0, 0);
while (window.isOpen())
{
Event windowEvent;
while (window.pollEvent(windowEvent))
{
if (windowEvent.type == Event::Closed)
{
window.close();
}
}
window.clear(Color::White);
window.draw(square);
window.display();
}
return 0;
}
#包括
使用名称空间sf;
常数整数宽度=1000;
const int HEIGHT=1000;
int main()
{
RenderWindow窗口(视频模式(宽度、高度),“窗口”,样式::标题栏|样式::关闭);
矩形正方形(矢量2f(100.f,100.f));
正方形。setFillColor(颜色:红色);
方形。设置位置(0,0);
while(window.isOpen())
{
事件窗口事件;
while(window.pollEvent(windowEvent))
{
如果(windowEvent.type==事件::关闭)
{
window.close();
}
}
窗户。透明(颜色:白色);
窗。画(正方形);
window.display();
}
返回0;
}
当我运行它时,这就是我得到的结果
自从发布这个问题以来,我意识到问题在于当标题栏被启用时,它会占用我窗口的空间,(0,0)在标题栏后面。不过,我仍然不知道如何修复它。你能发布一篇文章吗?@nvoigt,当然,我在文章中添加了它。正如你自己所注意到的,使用单色精灵进行测试并不能有效地得出正确的结论。我猜有人已经编写了一组专门为测试目的而精心设计的精灵,比如逐个错误、缩放问题、透明度舍入错误等等。可能有一个Windows API调用来获取任务栏的尺寸,但似乎SFML会考虑到这一点。您是在使用他们的二进制文件还是错过了预处理器选项?@Prodigle,谢谢您的帮助。不幸的是,我对C++很陌生,我不确定你的意思。我怎样才能知道我是否在使用他们的二进制文件或缺少预处理器选项?你能发布一个吗?@nvoigt,当然,我在帖子中添加了它。正如你自己所注意到的,使用unicolor sprites进行测试并不能有效地得出正确的结论。我猜有人已经编写了一组专门为测试目的而精心设计的精灵,比如逐个错误、缩放问题、透明度舍入错误等等。可能有一个Windows API调用来获取任务栏的尺寸,但似乎SFML会考虑到这一点。您是在使用他们的二进制文件还是错过了预处理器选项?@Prodigle,谢谢您的帮助。不幸的是,我对C++很陌生,我不确定你的意思。我怎样才能知道我是在使用他们的二进制文件还是缺少一个预处理器选项?