特にプログラムを弄ったわけでもないのに前まで読みこめていた射撃発射音などの効果音がならなくなりました。
しかし、同じプログラム内にある別の射撃音はなったりもします。↓問題のプログラム
まず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: 効果音が一部ならない
コードはなるべく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);
}
}
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 効果音が一部ならない
ルールを読まずに投稿してすみません><
そのコードに書き変えて試してみましたが変化はありませんんでした・・・
ちなみに今現在音がなるSEは[5]の発射音とアイテムゲット音、ボムのキュイーン音だけなんですよね・・・(ボムどかーん音はもとから使ってないのでわかりませんが)
意味があるかはわかりませんが↓は今のmusic.cppの中身です
そのコードに書き変えて試してみましたが変化はありませんんでした・・・
ちなみに今現在音がなる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: 効果音が一部ならない
int foo[10];ひるま さんが書きました:なぜかsound_se[0]が使えず
int sound_se[10];
foo[10] = 123; // sound_se[0]が壊れる可能性
こういうことである可能性大なのでいまのうちにきちんとチェックしておくべきかと。
放って置くとあとでもっと困ることになると思いますよ。