ページ 11

効果音が一部ならない

Posted: 2011年9月30日(金) 21:11
by ひるま
特にプログラムを弄ったわけでもないのに前まで読みこめていた射撃発射音などの効果音がならなくなりました。
しかし、同じプログラム内にある別の射撃音はなったりもします。↓問題のプログラム


まずload部分

         //敵のショット音を読み込む
         sound_se[0]=LoadSoundMem("../dat/se/enemy_shot.wav");
//敵の死亡音
sound_se[1]=LoadSoundMem("../dat/se/enemy_death.wav");
//自機ショット音を読み込む
sound_se[2]=LoadSoundMem("../dat/se/cshot.wav");
//自機死亡音
sound_se[3]=LoadSoundMem("../dat/se/char_death.wav");
//チャージ
sound_se[4]=LoadSoundMem("../dat/se/charge.wav");
//発射
sound_se[5]=LoadSoundMem("../dat/se/hassya.wav");
//自機弾ヒット音
sound_se[8]=LoadSoundMem("../dat/se/cshot.wav");
//ボムキュイーン音
sound_se[14]=LoadSoundMem("../dat/se/bom0.wav");
//ボムどかーん音
sound_se[15]=LoadSoundMem("../dat/se/bom1.wav");
//アイテムゲット音
sound_se[34]=LoadSoundMem("../dat/se/item_get.wav");





次に弾幕部分

void boss_shot_bulletH003(){
#define TM003 300//何カウント周期か?
int i,k,t=boss_shot.cnt%TM003,t2=boss_shot.cnt;
double angle;
if(t%30==0){ //10カウントおきに6回
angle=bossatan2();
for(i=0;i<20;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col =3;
boss_shot.bullet[k].x =boss.x;
boss_shot.bullet[k].y =boss.y;
boss_shot.bullet[k].knd =1;
boss_shot.bullet[k].angle =angle+PI2/20*i;//円形弾(30way弾)
boss_shot.bullet[k].flag =1;boss_shot.bullet[k].flag2 =1;
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].spd =2;
boss_shot.bullet[k].state =0;
se_flag[0]=1;  ←ここが通常弾発射音だけどならない
}
}
}



if(t==100)se_flag[4]=1;//マグナスチャージ音  ←ついでにこれもならない



if(t==201){//マグナス発射
angle=bossatan2();
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col =0;
boss_shot.bullet[k].x =boss.x;
boss_shot.bullet[k].y =FMY/2;
boss_shot.bullet[k].knd =3;
boss_shot.bullet[k].angle =PI/2;
boss_shot.bullet[k].flag =1;boss_shot.bullet[k].flag2 =1;
boss_shot.bullet[k].cnt =0;
boss_shot.bullet[k].spd =0;
boss_shot.bullet[k].state =1;
se_flag[5]=1;        ←なぜかこれは鳴る
}
}


for(i=0;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet.flag>0){

if(boss_shot.bullet.state==0){
if(boss_shot.bullet.spd>0.5){
if(boss_shot.bullet.cnt>10){
boss_shot.bullet.spd -= 0.005;
}
}
}

}
}

for(int j=0;j<BOSS_BULLET_MAX;j++){

if(boss_shot.bullet[j].flag>0){
if(boss_shot.bullet[j].state==1){

if(t==0)boss_shot.bullet[j].flag=0;


for(int k=0;k<BOSS_BULLET_MAX;k++){
if(boss_shot.bullet[k].flag>0){
if(boss_shot.bullet[k].state==0){

if(boss_shot.bullet[k].x > boss_shot.bullet[j].x){//周囲弾と速射が並んだら
boss_shot.bullet[k].x -= 1;
}else if(boss_shot.bullet[k].x <= boss_shot.bullet[j].x){
boss_shot.bullet[k].x += 1;
}

}
}
}
}
}
}
}




こういった現状です。なるものとならないものが同プログラム内にあります・・・ここのプログラムですが一応音鳴らす部分も↓

void music_play(){
int i;
for(i=0;i<SE_MAX;i++){
if(se_flag==1){
if(CheckSoundMem(sound_se)!=0){
if(i==8)continue;//敵被弾音なので連続で再生されるため、ちゃんと再生し終わってから再生
StopSoundMem(sound_se);
}
PlaySoundMem(sound_se,DX_PLAYTYPE_BACK);
}
}
}



なにか理由があるんでしょうか

Re: 効果音が一部ならない

Posted: 2011年9月30日(金) 21:50
by みけCAT
コードはなるべくcodeタグで囲みましょう。

コード:

void music_play(){
int i;
for(i=0;i<SE_MAX;i++){
if(se_flag[i]==1){
if(CheckSoundMem(sound_se[i])!=0){
if(i==8)continue;//敵被弾音なので連続で再生されるため、ちゃんと再生し終わってから再生
StopSoundMem(sound_se[i]);
}
PlaySoundMem(sound_se[i],DX_PLAYTYPE_BACK);
}
}
}
これを

コード:

void music_play(){
int i;
for(i=0;i<SE_MAX;i++){
if(se_flag[i]==1){
se_flag[i]=0;//追加
if(CheckSoundMem(sound_se[i])!=0){
if(i==8)continue;//敵被弾音なので連続で再生されるため、ちゃんと再生し終わってから再生
StopSoundMem(sound_se[i]);
}
PlaySoundMem(sound_se[i],DX_PLAYTYPE_BACK);
}
}
}
無保証ですがこうしたらどうなりますか?

Re: 効果音が一部ならない

Posted: 2011年9月30日(金) 23:16
by ひるま
ルールを読まずに投稿してすみません><

そのコードに書き変えて試してみましたが変化はありませんんでした・・・

ちなみに今現在音がなるSEは[5]の発射音とアイテムゲット音、ボムのキュイーン音だけなんですよね・・・(ボムどかーん音はもとから使ってないのでわかりませんが)

意味があるかはわかりませんが↓は今のmusic.cppの中身です

コード:

#include "../include/GV.h"

void music_ini(){
	memset(se_flag,0,sizeof(int)*SE_MAX);
}

void music_play(){
	int i;
	for(i=0;i<SE_MAX;i++){
		if(se_flag[i]==1){
			se_flag[i]=0;//追加
			if(CheckSoundMem(sound_se[i])!=0){
				if(i==8)continue;//敵被弾音なので連続で再生されるため、ちゃんと再生し終わってから再生
				StopSoundMem(sound_se[i]);
			}
			PlaySoundMem(sound_se[i],DX_PLAYTYPE_BACK);
		}
	}
}



void bgm_main(){

	if(stage==1){
        if(stage_count==101){//最初に読み込む

					PlaySoundMem(sound_music[0],DX_PLAYTYPE_LOOP);
        }

		if(stage_count==4000){
			StopSoundMem(sound_music[0]);

		}

		if(boss.cnt == 1 && n_boss==1 && bgm_boss==1){//ラスボス戦開始と同時に再生(bgm_bossは、スペカのたびにボスBGMを重複させないため)
					PlaySoundMem(sound_music[1],DX_PLAYTYPE_LOOP);
		}
	}


	if(stage==2){
        if(stage_count==101){//最初に読み込む
			StopSoundMem(sound_music[0]);
          
			StopSoundMem(sound_music[1]);
     
			PlaySoundMem(sound_music[2],DX_PLAYTYPE_LOOP);
        }

		if(stage_count==4200){
			StopSoundMem(sound_music[2]);
		}

		if(boss.cnt == 1 && n_boss==1 && bgm_boss==1){//ラスボス戦開始と同時に再生(bgm_bossは、スペカのたびにボスBGMを重複させないため)
					
					PlaySoundMem(sound_music[3],DX_PLAYTYPE_LOOP);
		}
	}

	if(stage==3){

		if(stage_count==101){//最初に読み込む
					StopSoundMem(sound_music[3]);

					PlaySoundMem(sound_music[4],DX_PLAYTYPE_LOOP);

		}

		if(stage_count == 4300){
		      StopSoundMem(sound_music[4]);
	
		}

		if(boss.cnt == 1 && n_boss==1 && bgm_boss==1){//ラスボス戦開始と同時に再生(bgm_bossは、スペカのたびにボスBGMを重複させないため)
			
					PlaySoundMem(sound_music[5],DX_PLAYTYPE_LOOP);

		}
	}

	if(stage==4){

		if(stage_count==101){//最初に読み込む
					StopSoundMem(sound_music[5]);
             
					PlaySoundMem(sound_music[6],DX_PLAYTYPE_LOOP);

		}
		
		if(stage_count == 8000){
		      StopSoundMem(sound_music[6]);
		}

		if(boss.cnt == 1 && n_boss==1 && bgm_boss==1){//ラスボス戦開始と同時に再生(bgm_bossは、スペカのたびにボスBGMを重複させないため)
					PlaySoundMem(sound_music[7],DX_PLAYTYPE_LOOP);

		}
	}

	if(stage==5){

		if(stage_count==101){//最初に読み込む
					StopSoundMem(sound_music[7]);

					PlaySoundMem(sound_music[8],DX_PLAYTYPE_LOOP);

		}
		
		if(stage_count == 4400){
		      StopSoundMem(sound_music[8]);
		}

		if(boss.cnt == 1 && n_boss==1 && bgm_boss==1){//ラスボス戦開始と同時に再生(bgm_bossは、スペカのたびにボスBGMを重複させないため)
					PlaySoundMem(sound_music[9],DX_PLAYTYPE_LOOP);

		}
	}

}




void music_stop(){//曲を全部止める(タイトルへ戻る時)
	for(int i=0;i<10;i++){
		StopSoundMem(sound_music[i]);
	}
}

Re: 効果音が一部ならない

Posted: 2011年10月20日(木) 02:26
by ひるま
解決しました

なぜかsound_se[0]が使えず、代わりに同じSEをsound_se[50]などの他の数字に入れたら鳴りました

Re: 効果音が一部ならない

Posted: 2011年10月20日(木) 18:54
by ISLe
ひるま さんが書きました:なぜかsound_se[0]が使えず
int foo[10];
int sound_se[10];
foo[10] = 123; // sound_se[0]が壊れる可能性

こういうことである可能性大なのでいまのうちにきちんとチェックしておくべきかと。
放って置くとあとでもっと困ることになると思いますよ。