2016-07-25 1 views
0

私はmediasf::Sprite)とmediaTexturesf::Texture)を格納するDBObjectを持っています。これらのdbobjectはstd::vectorに格納されているSFMLの白い四角ですが、テクスチャが細かく読み込まれています

void DBObject::loadMedia() { 
    myStream mediaStream(mediaPath); 
    mediaTexture.loadFromStream(mediaStream); 
    media.setTexture(mediaTexture); 
    mediaInit = true; 
} 

:これは私のDBObject::loadMedia()機能です。

スプライトをディスプレイに描画しようとすると、それは完全に白くなり、明らかにこれは範囲外のテクスチャからのものです。しかし、私はDBObjectのテクスチャを定義するので、それはオブジェクトの寿命を持っている必要があります...右か?

しかし、私がmain()関数で新しいスプライトを作成してnewSprite.setTexture(DBObj.mediaTexture)を実行すると、それはうまく表示されるので、テクスチャ自体はうまくロードされていますが、スプライトに何かが起きています。

答えて

1

これはthe white square problemと呼ばれます。

基本的に、オブジェクトはコピーされますが、コピーコンストラクタはコピーされたテクスチャを使用するようにコピーされたスプライトテクスチャを更新せず、元のテクスチャが破棄されてコピーされたスプライトはもはや有効なテクスチャ。これは、たとえば、std::vectorがより多くのメモリを割り当て、移動/コピーする必要がある場合などに発生します。

+0

どうすれば変更できますか?常にスプライトをテクスチャで更新し続けますか? – TheAbelo2

+0

いいえ、コピーしたときに、カスタムコピーコンストラクタを使用します。 – Hiura

+0

ありがとう、私はカスタムコピーを追加し、今は正常に動作します。 :) – TheAbelo2

関連する問題