1

私がマニュアルを読んだ限りでは、サウンドを再生する必要がある場合、オブジェクトが必要であり、実際の再生を制御Soundする一時的なオブジェクトを作成します。これらのオブジェクトSoundChannelを管理するメモリ効率の良い方法があるかどうかを知りたいです。SoundChannelこれまでのところ、これらは「ファイア アンド フォーゲット」タイプのオブジェクトのようであり、それらを半永続的にする唯一の方法はSound.play()、非常に多くの再生回数で呼び出しを行うことです。ただし、このアプローチは、たとえば、矢印のショットやボタンのクリックなどの 1 回限りのサウンドには機能しません。そして、呼び出した場合SoundChannel.stop()、再生を再開する手段がないため、オブジェクトを破棄することもできます。狂ったようにオブジェクトをスポーンせずSoundChannel、1 回限りのサウンド再生とバックグラウンド ミュージックとして知られる無限時間サウンドの両方を処理できるようにするための解決策はありますか?

4

1 に答える 1

1

SoundChannel実際、この種のヒープの使用には、ActionScript のような言語を使用する領域が伴います。

サウンドからの GC の使用について心配する必要はありません - 時期尚早の最適化は悪です! できる最善Soundの方法は、プレイごとに新しいオブジェクトを作成するのではなく、オブジェクトを再利用することです。たとえば、ゲームでフレームごとに適切な数のサウンドを再生している場合、GC の問題はそれほど大きくないはずです。SoundChannels は軽量で、オーディオ データの 1 つのコピーを参照するため、それほど大したことではありません。ゲームオブジェクトやビットマップなど、心配すべきより重い割り当てがおそらくあるでしょう。

SampleDataEventを使用してオーディオを動的にミキシングすることで使用を避けることもできますが、これは逆の効果をもたらし、コーディングがより困難になることは言うまでもなく、プロセッサをより集中的に使用します。SoundChannel

GC が本当に心配な場合は、System.pauseForGCIfCollectionImminentメソッドを使用して、ゲームの遷移中など、邪魔にならない時間に GC を実行するように指示できます。

于 2013-03-15T21:42:59.777 に答える