我学习使用SFML与制作小游戏的想法,到目前为止,我已经创建了一个窗口和混乱有关它的设置,并设置了抽奖循环和事件处理程序。SFML loadFromFile未定义参考
麻烦启动一次我试着用下面的代码添加到我的第一个纹理:
#include "SpaceNomad.ih"
void MainMenu(GameEngine &Engine)
{
sf::Texture texture;
if(!texture.loadFromFile("MenuBackGround.png"))
{
cout << "couldn't load background texture\n";
}
sf::Sprite *sprite = new sf::Sprite;
sprite->setTexture(texture);
Engine.AddEntity(sprite, 5);
}
这是一个不同的图像字面上的SFML tutorial page给出的示例代码之外。
当我尝试编译此我得到以下错误:
||=== Build: Debug in space nomad (compiler: GNU GCC Compiler) ===|
obj\Debug\projects\st\take2\MainMenu.o||In function `Z8MainMenuR10GameEngine':|
D:\projects\st\take2\MainMenu.cpp|7|undefined reference to `_imp___ZN2sf7Texture12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_4RectIiEE'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
我已经检查了所有的SFML库都包含在构建选项(我使用的代码::与海湾合作委员会MinGW的块) 。
https://drive.google.com/file/d/0B4qzXcgqbLZtcHJWUy1vSUhpdVk/view?usp=sharing
其他主题我见过处理的人取得了自己的功能未定义的引用,但在这里我使用的库。
编辑:我只是试着与同一libary基本形状:
sf::CircleShape *shape = new sf::CircleShape(50);
// set the shape color to green
shape->setFillColor(sf::Color(100, 250, 50));
Engine.AddEntity(shape, 5);
来编译和显示没有问题。
不过,我要补充的是,即使你修复未定义引用错误,你将面对的'白色正方形problem'。我也不认为这是一个好的设计,只要你可以使用堆。为什么你的'sf :: Sprite'-Instance不在堆栈上? – NaCl
这个想法是保持背景或按钮等对象的执行以及绘制循环的分离,其中绘制循环只有一个指向它需要绘制的对象的指针。这里的对象实现还没有实现。如果我把它放在堆栈中,它会在它被绘制的时候被清理干净。 –
您的纹理在绘制前被清理干净。精灵只有一个指向纹理的指针,而不是纹理本身的整个副本。因此你会注意到纹理不会被绘制。 – NaCl