問題が発生しました。描画ループでスプライトを描画しようとすると、描画されません。このクラスのコンストラクターでは、スプライトを設定しています。
この質問から私が理解していることから、コンストラクター内にテクスチャとスプライトをロードしたいのですが、描画ループから描画しようとすると機能しません。
私はコンストラクターにテクスチャーをロードするプログラムを持っていて、それはうまく動作するので、私が想像するのは間違っています(そして、上の投稿にあなたのプログラムの6行が表示されていないのでわかりません)スプライトオブジェクトはクラスレベルで定義されていません。
使用しているテクスチャオブジェクトのヘッダーファイルは次のとおりです。
class GraphPaper
{
public:
GraphPaper();
~GraphPaper();
bool isObjectLoaded();
sf::Sprite getSprite();
private:
void load(std::string filename);
bool isLoaded;
sf::Texture texture;
sf::Sprite sprite;
const std::string file = "images/Graph-Paper.png";
};
テクスチャオブジェクトとスプライトオブジェクトは、クラス全体のレベルでプライベートメンバーとしてリストされ、getterメソッドを介してアクセスされます。
そして、これがそのクラスのコンストラクターです(あなたがやりたいこととよりよく一致するように少し変更されました):
#include "GraphPaper.h"
GraphPaper::GraphPaper() //: isLoaded(false)
{
if (texture.loadFromFile(file) == false)
isLoaded = false;
else
{
texture.setRepeated(true);
sprite.setTexture(texture);
isLoaded = true;
}
//load(file);
assert(isObjectLoaded());
}
この後、「GraphPaper」オブジェクトを描画するだけです。
mainWindow.draw(paper.getSprite());
MainWindowヘッダーファイルで「paper」という「GraphPaper」オブジェクトを定義したので、すでにアクセスできます。
#pragma once
#include "GraphPaper.h"
#include "stdafx.h"
class MainWindow
{
public:
void close();
void start();
void moveCamera(sf::Event);
private:
bool leftMousePressed, rightMousePressed, isExiting;
int r, g, b, mouseX, mouseY;
GraphPaper paper;
const sf::Color white = sf::Color(255, 255, 255);
sf::RenderWindow mainWindow;
sf::View view;
};
これがあなたがやりたいことであると仮定すると、あなたの問題はおそらくヘッダーファイルにあります。クラスレベルで定義されたオブジェクトは、一度ロードされると、クラス自体が破棄されるまで破棄されません。コンストラクターが含まれているクラスへの参照を破棄していないことを確認する必要があるかもしれません。たとえば、ループ内にクラスのインスタンスを作成すると、ループが終了した瞬間にクラスオブジェクトが破棄されます。