SFMLを長年使用していましたが、今までAudioモジュールを使用したことはありません。sf :: SoundBufferを宣言すると、終了時にプログラムがクラッシュする
私は
class Deck : public sf::Drawable
{
public:
...
private:
sf::Sound shuffleSound;
...
static sf::SoundBuffer soundBuffer;
};
...私の最初のアプローチはこれに類似していたので、私のゲームに効果音を追加したいと計画が一度soundBuffer
を初期化し、各オブジェクトのコンストラクタでshuffleSound.setBuffer(soundBuffer);
を行うことでした。しかし、私はこのエラーを得た:このエラーをグーグル後
AL lib: (EE) alc_cleanup: 1 device not closed
Assertion failed: (lockret == althrd_success), function LockLists, file /Users/m/Desktop/tmp/openal/build_deps/openal-soft-openal-soft-1.17.2/Alc/ALc.c, line 776.
(lldb)
を、私は、グローバルスコープでSFMLリソースを置くことではないどこかについては曖昧なメッセージを見ました。 static
変数は、エラーの原因となった考え出す、私はこの試みた:
class Deck : public sf::Drawable
{
public:
...
private:
sf::Sound shuffleSound;
...
static std::unique_ptr<sf::SoundBuffer> bufptr;
};
をし、オブジェクトが空だった場合make_unique
を呼び出し、その後、コンストラクタでshuffleSound.setBuffer(*bufptr)
を行うことによって、一度のポインタを初期化します。
しかし、私はまだ同じエラーが発生します。プログラムが終了しようとするまで、エラーは発生しません。
ご協力いただければ幸いです。
閉じるときにSFMLがOpenALリソースを正しくクリーンアップしないように見えます。 Alc.hはOpenALのutilヘッダーなので、これはバグかもしれません。 –
レンダリングハンドラにサービスを提供するバックグラウンドスレッドがあり、オーディオ出力を停止する前にラグを抜いてしまったと思います。 – marko