kowさんは天ざる大好き

創作に絶望すると、世界が反転した日記

効果音再生周辺

やね本の話をしよう。


今日も楽しくプログラミング。<スランプだったんじゃないのかヽ(`Д´)ノ
そんなんで、yaneSDK4Dで効果音再生。
BGMの再生と効果音の再生なんかちゃうの? というのもあると思うが、この詳細はやね本を参考にしていただくということで。
要は一定フレーム内で再生要求のかかった効果音は間引きする、ちゅうあれである。

yaneSDK4Dにはもちろん、その機構が用意されている。
y4d_sound.soundloaderに実装されとるので、そんな仕組みしらんともいいようになっとる。


というわけで、無事効果音の実装は終わりましたよと。


おや、なにか話が割愛されている気がする。
おう、そうだ、yaneSDK4DのSoundLoader#playSE 周辺にはバグがある!
それをわすれとった。
playSE、updateSEをするんだけど、updateSE、これからなず落ちる。
コードを追っていくとわかった。
リソースの情報を保持する基底クラスInfoがあって、SoundLoaderでは、再生フレーム時間を保持したいために、それを継承してSoundInfoを使用する。
SoundLoaderはCacheLoaderを継承していて、リソースのリストを読み込むのは基底クラスで行う。基底クラスでリソースのリストを読み込んでInfoクラスを生成するのだけど、このInfoクラスを生成するファクトリメソッド(abstract factoryパターンやね)は用意されているんだけど、つかわれてへん...
従って常にInfoクラスが生成されて、SoundInfoクラスは生成されない。
SoundLoader側でももちろん、SoundInfoを期待しているので、キャストする。ダウンキャストに失敗して null が返ってくる(ClassCastExceptionでないんやね...)。
nullにアクセスする。


というわけで、無事効果音の実装は終わりましたよと。
と、まあ、ノベルゲームでそんなにボタンを連打するヤツがいるのか? というのは疑問だけど予め不測の事態に対応しておくのは良いことじゃないですか、と。