所以我已经在我的代码中寻找了几个小时,最后我想我发现了代码的问题。SFML 方法不起作用或我使用错误。
我正在尝试将一个 PNG 文件从我的磁盘加载到程序中,以便我可以在屏幕上呈现它。
但图片似乎从未加载到程序中。当我检查调试器时,我看不到有关我尝试加载的文件的实际信息。
我将首先展示整个 Engine.cpp 文件,然后逐步解释会发生什么。
我的 Engine.cpp 看起来像这样:
#include "Engine.h"
#include <SFML\Graphics.hpp>
Engine::Engine()
{
}
Engine::~Engine()
{
}
bool Engine::Init()
{
LoadImages();
window = new sf::RenderWindow(sf::VideoMode(800,600,32), "RPG");
if(!window)
return false;
return true;
}
void Engine::LoadImages()
{
sf::Image sprite;
sprite.loadFromFile("C:/Users/Vipar/Pictures/sprite1.png");
imageManager.AddImage(sprite);
testTile = new Tile(imageManager.GetImage(0));
}
void Engine::RenderFrame()
{
window->clear();
testTile->Draw(0,0,window);
window->display();
}
void Engine::ProcessInput()
{
sf::Event evt;
//Loop through all window events
while(window->pollEvent(evt))
{
if(evt.type == sf::Event::Closed)
window->close();
}
}
void Engine::Update()
{
}
void Engine::MainLoop()
{
sf::Image sprite;
sprite.loadFromFile("C:/Users/Vipar/Pictures/sprite1.png");
imageManager.AddImage(sprite);
testTile = new Tile(imageManager.GetImage(0));
//Loop until our window is closed
while(window->isOpen())
{
ProcessInput();
Update();
RenderFrame();
testTile->Draw(0,0,window);
}
}
void Engine::Go()
{
if(!Init())
throw "Could not initialize Engine";
MainLoop();
}
我称这种方法为:
void Engine::LoadImages()
{
sf::Image sprite;
sprite.loadFromFile("C:/Users/Vipar/Pictures/sprite1.png");
imageManager.AddImage(sprite);
testTile = new Tile(imageManager.GetImage(0));
}
如果需要,它会将图像添加到我的 ImageManager 以供以后使用。这样做是为了提高效率。然后我将 Image 应用到名为Tile
. 它看起来像这样:
#include "Tile.h"
#include <SFML\Graphics.hpp>
#include <iostream>
Tile::Tile(sf::Image& image)
{
sf::Texture tex;
tex.loadFromImage(image);
baseSprite.setTexture(tex,true);
}
Tile::~Tile()
{
}
void Tile::Draw(int x, int y, sf::RenderWindow* rw)
{
baseSprite.setPosition(x,y);
rw->draw(baseSprite);
}
void Tile::Destroy()
{
delete &baseSprite;
}
然后我在屏幕上绘制 Tile 来测试它。
为什么这个 png 文件甚至没有加载到我的程序中?如果您需要其他代码,请告诉我。我对这个 SFML 框架和 C++ 有点陌生,但我擅长 Java 和 C#。