だから私は何時間も自分のコードを見回してきましたが、最終的にコードの問題を見つけたと思います. 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;
}
次に、タイルを画面に描画してテストします。
そもそも、このpngファイルがプログラムにロードされないのはなぜですか? 追加のコードが必要な場合は、お知らせください。私はこの SFML フレームワークと C++ には少し慣れていますが、Java と C# は得意です。