我在Windows 7上使用CodeBlocks 16.01和SFML GCC 4.9.2 TDM(SJLJ) - 32位 只有loadFromFile不起作用,我不知道该怎么做。 我试图重新安装CodeBlocks,尝试了其他版本的sfml,但没有任何效果。我对SFML有点新鲜,而且非常令人沮丧。
#include <iostream>
#include<string>
#include <SFML/Graphics.hpp>
using namespace sf;
using namespace std;
int changeX = 0;
int changeY = 0;
int rot=0;
int main()
{
bool fscreen;
fscreen=false;
sf::Texture tex;
Sprite sprite;
RenderWindow window(VideoMode(640, 480,16), "SFML works!", Style::Default);
int direction=1,shiftX=10;
while(window.isOpen())
{
Event event;
while(window.pollEvent(event))
{
switch(event.type)
{
case Event::Closed:
window.close();
break;
case Event::KeyPressed:
if(event.key.code == Keyboard::Escape)
window.close();
if(event.key.code == Keyboard::F12)
{
fscreen = !fscreen;
window.close();
window.create(VideoMode(1920,1080,16), "SFML Test", (fscreen ? Style::Fullscreen : Style::Resize));
}
if (event.key.code==Keyboard::A)
{
changeX = -5;
rot = -5;
}
else if (event.key.code==Keyboard::D)
{
changeX = 5;
rot =5;
}
else
{
changeX = 0;
}
if (event.key.code==Keyboard::W)
{
changeY = -5;
rot = 0;
}
else if (event.key.code==Keyboard::S)
{
changeY = 5;
rot = 0;
}
else
{
changeY = 0;
}
break;
}
tex.loadFromFile("img\\obraz.png");
sprite.move(changeX, changeY);
sprite.setOrigin(100, 100);
Vector2f origin = sprite.getOrigin();
sprite.rotate(rot);
sprite.setTexture(tex);
window.clear();
window.draw(sprite);
window.display();
}
}
return 0;
}
错误:
-dedefined reference to`sf :: Texture :: loadFromFile(std :: string const&amp;,sf :: Rect const&amp;)'
-error:ld返回1退出状态
答案 0 :(得分:0)
您在
中向loadFromFile
提供的路径
tex.loadFromFile("img\\obraz.png");
是相对路径。这意味着它将相对于您当前的工作目录(查找cwd()
)得到解决。
您有两种(简单)方法可以解决您的问题(还有其他方法,但它们更难解决)。
1)在loadFromFile
的调用中指定资源的完整绝对路径,如tex.loadFromFile("C:/foo/bar/baz.png")
。由于几个原因,这显然没有吸引力,首先是您的程序可能安装在不同的位置。
2)坚持使用相对路径,但要确保通过在启动时将程序工作目录更改为某个已知位置(可能相对于可执行文件的位置)来了解相对路径。