sfmlスプライトクラス.setTexure()メソッドは、イテレーターのコンストラクター内では機能しませんが、イテレーターが既に作成されている場合は機能します
ウィンドウに描画されているフレームの構造を構築しようとしています。スプライトクラスとテクスチャクラスを持つsfmlライブラリを使用しています。frameData構造のコンストラクターで、ファイルからテクスチャをロードし、.setTexture()メソッドを使用してスプライトに適用します。プログラムをコンパイルして実行すると、マシンに応じて白いブロックが発生するか、プログラムがクラッシュします。
frameDataのコンストラクターの外で.setTexture()を使用してテクスチャへのポインター参照を作成すると、機能します。
これが、さまざまなフレームを反復処理するイテレータ構造を使用している場合はすべてです。関連するコードは次のとおりです。最初に、これはFrameData構造体のヘッダーにあります。
private:
struct FrameData
{
FrameData(const std::string& fileName, int frameDelay);
sf::Texture texture;
sf::Sprite sprite;
unsigned int frameDelay;
};
次に、実際のコンストラクターは機能していません。
const sf::Sprite& SpriteAnimator::currentFrame() const
{
return currentFrame_->sprite;
}
SpriteAnimator::FrameData::FrameData(const std::string& fileName, int frameDelay)
: frameDelay(frameDelay)
{
texture.loadFromFile(fileName);
sprite.setTexture(texture);
}
そして第三に、これが機能するものです:
const sf::Sprite& SpriteAnimator::currentFrame() const
{
currentFrame_->sprite.setTexture(currentFrame_->texture);
return currentFrame_->sprite;
}
SpriteAnimator::FrameData::FrameData(const std::string& fileName, int frameDelay)
: frameDelay(frameDelay)
{
texture.loadFromFile(fileName);
sprite.setTexture(texture);
}
なぜこれが起こるのかについてのアイデアはありますか、私たちは何かを逃していますか?コンストラクターを適切に機能させたいのですが、現在のフレームはテクスチャの変更よりも頻繁に返されるため、現在のフレームが返されるたびにテクスチャを更新する必要はありません。
ありがとうございました!