DXライブラリでSEを鳴らすとおかしくなる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みなと

DXライブラリでSEを鳴らすとおかしくなる

#1

投稿記事 by みなと » 15年前

敵と当たったらSEを鳴らしたいのですが音声がループしてしまいます。
直す方法はないのでしょうか?
int sound;

main~{
  sound = LoadSoundMem( "DATA/SOUND/SE/death.wav" ) ;
  while(1){
     if(当たったら)PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ; // NORMALでも駄目でした・・・。
  }
}

シエル

Re:DXライブラリでSEを鳴らすとおかしくなる

#2

投稿記事 by シエル » 15年前

当たり判定は間違ってませんか?

みなと

Re:DXライブラリでSEを鳴らすとおかしくなる

#3

投稿記事 by みなと » 15年前

シエル様
判定はおかしくないです・・・。
whileの中に書いている為、while回数分再生されてしまうのかと・・・。
これを回避したいのですがDXライブラリではSEには対応していないのでしょうか?

ru

Re:DXライブラリでSEを鳴らすとおかしくなる

#4

投稿記事 by ru » 15年前

if(当たったら)を消したら鳴るか?
death.wav読み込めているか?
>これを回避したいのですがDXライブラリではSEには対応していないのでしょうか?
SEとか関係ないです

dic

Re:DXライブラリでSEを鳴らすとおかしくなる

#5

投稿記事 by dic » 15年前

if(当たったら)
の条件を満たしている間再生さる設計ですが
一回のみ鳴らしたいので2回目以降は鳴らさないようにフラグが必要ではないでしょうか?

wing

Re:DXライブラリでSEを鳴らすとおかしくなる

#6

投稿記事 by wing » 15年前

私もゲームを作っていてSEがなりっぱなしになったことがありました。
while(ProcessLoop()==0){//メインループ
        for(int i=0; i<SE_MAX; i++)
            se_flag = 0;
        switch(gstate){
            case GAME_INIT:
                first_init();
                load();
                gstate = GAME_TITLE;
                break;

私の場合は、上記のコードで
 for(int i=0; i<SE_MAX; i++)
   se_flag = 0;
の書き忘れでした。

みなと

Re:DXライブラリでSEを鳴らすとおかしくなる

#7

投稿記事 by みなと » 15年前

皆様ご回答ありがとうございます。

ゲームの開始時に一回だけ実行する関数をテストで作り
そこで鳴らすと問題なくなってくれているので音の読み込みは出来ております。

SEを鳴らす場合、そのSEごとにFlagを用意する必要があるのですか・・・。
少々、面倒ですね・・・。

ただFlagを用意しても問題があるかと思います。
そのFlagを鳴ってない時に限り毎フレームfalseにしたとしても
当たり判定にいる間はない続けてしまいますよね?

Ma

Re:DXライブラリでSEを鳴らすとおかしくなる

#8

投稿記事 by Ma » 15年前

フラグなんてつくる必要ないです。

念のため以下を確認してください。


if(当たったら)PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ;

if(当たったら){PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ; }

でなおるかどうか。


毎フレーム ProcessMessage() を呼んでいるか確認してください。


if文内にbreak point をいれるか、printfDx 等をいれて、必要なときにしかif文内に入っていないか確認してください。


*追記:本題とは関係ないとおもいますが・・・

dicさんも言っていますが、当たっている間再生しなおす設計になっているので
if(当たり && CheckSoundMem(sound) == 0){PlaySoundMem( sound , DX_PLAYTYPE_BACK ) ; }

等の処置をいれるといいかと。
あるいは、前フレームであたっていたか確認するためのフラグを作るなどの方法でも可。

*本来の問題はループ再生してしまうことであって、再生のしなおしではないのでこれが原因ではないはずです。
(これが問題だったとしたら、ループというよりずっと最初の音がなり続ける事になると思います。) 画像

Dixq (管理人)

Re:DXライブラリでSEを鳴らすとおかしくなる

#9

投稿記事 by Dixq (管理人) » 15年前

プログラムコードをアップした方が早そうな気がするのですがどうでしょう?

閉鎖

“C言語何でも質問掲示板” へ戻る