我在Windows7上使用的是CodeBlocks 16.01和SFML GCC 4.9.2 TDM (SJLJ) -32位,只有loadFromFile不能工作,我不知道该怎么办。我试着重新安装CodeBlocks,尝试了其他版本的sfml,但是没有任何worked.Im是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;
}错误:
-undefined对`sf::Texture::loadFromFile(std::string const&,sf::Rect const&)‘的引用
-error: ld返回了1个退出状态
发布于 2018-04-28 02:41:29
中提供给loadFromFile的路径
tex.loadFromFile("img\\obraz.png");是一个相对路径。这意味着它将相对于您当前的工作目录(查找cwd())进行解析。
你有两种(简单的)方法来解决你的问题(还有其他的方法,但它们更难)。
1)在类loadFromFile的tex.loadFromFile("C:/foo/bar/baz.png")调用中,指定资源的完整绝对路径。这显然不具吸引力,原因有几个,首先也是最重要的是,您的程序可能会安装到不同的位置。
2)坚持使用相对路径,但在启动时将程序工作目录更改为某个已知位置(可能是相对于可执行文件的位置),以确保您知道它的相对位置。
https://stackoverflow.com/questions/50067356
复制相似问题