忍者ブログ

マインのブログ

マインが何かを気まぐれに書く日記です。

[PR]

カテゴリー:

2024/04/17(Wed)07:25

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

No.|CommentTrackback

ディレイにやられた

カテゴリー:1日の出来事

2006/02/17(Fri)01:32


えと、今しがた俺のマイミクの方から俺のゲームに使ってもいいというBGMをもらい、
オレのゲームに組み込みました。
いやはや、すごいです。彼と彼の後輩が作った曲をもらったのですが、
後輩さんのほうの曲はMMOでも使えるんじゃないか、くらい明るくていい曲です。
マイミクの方が作った曲は多少暗い曲ですが、
俺のゲームにはこれくらいがちょうどよく、
早速3曲入れさせてもらいました。
本当にありがとうございます。

で、プログラムのほうですが、ループの最初で再生するとそのループの最初に再び来たときに
また再生してしまい、ひどいことになります。
そこで、再生中の場合は再生しないという条件をつけました。
この再生中かどうかはIsPlaying()を使えば分かります。
だから
if (!IsPlaying(bgm)) Play(bgm);
見たいな感じにしました。(関数化しているので実際はこうではありませんが)

しかし、なぜかうまくいかない。
理論上は動くはずなのに。
で、MSDNで調べてみると
「遅延時間があるためIsPlaying()は再生直後でもS_FALSEを返す場合があります」
とのこと。
つまり、再生しても再生中でないとみなすことがあるそうです。
実際に試してみましたが、確かに再生直後は再生中でないとなりました。

この辺の対処がよく分からないので力技を使うことに。
if (!IsPlaying(bgm)) {
Play(bgm);
while (!IsPlaying(bgm));
}
このようにIsPlaying()がちゃんとS_OKを返すようになるまで無限ループするようにしました。
はい、ほんとに無理矢理ですね。
でも、仕方ないんです。
これしか思いつかなかったんですから。

うーん、やっぱりフラグをつけたほうがいいのかな。
まあ、動いてるからいいか。
このあたり、ライブラリではどうやってるんだろ?
自分のライブラリに組み込むときはこの辺を考慮しながら、
そして本でも見ながらやってみるかな。

どうでもいいけど、オレの日記は長いな。

拍手[0回]

PR

No.806|Comment(0)Trackback()

Comment

Comment Write
Name
Title
Mail
URL

Pass Vodafone絵文字 i-mode絵文字 Ezweb絵文字 

Trackback

URL :