はじめての投稿です。
自分は専門学校でC言語を習っています。
今、個人でゲームを制作しているのですが、なぜかswitch文の中にPlaySoundMem()を使って再生するとBGMが再生されません。
PlaySoundMem()を外に出すと再生されています。
レベルの低い質問ですが、良ければ解答お願いします。
switch文の中でBGMが再生されない。
Re: switch文の中でBGMが再生されない。
code
//タイトル画面で使う素材のロード
void load_title(){
title.Gra[0] = LoadGraph("画像/タイトル/タイトル1.png");
title.Gra[1] = LoadGraph("画像/タイトル/タイトルボタン.png");
title.Gra[2] = LoadGraph("画像/タイトル/矢印.png");
title.music[0] = LoadSoundMem("音/BGM/オープニング.mp3");
}
//タイトル画面での操作
void title_control(){
int pad = GetJoypadInputState(DX_INPUT_PAD1);
if (Pad(pad) == UP){
title.pos = 0;
}else if (Pad(pad) == DOWN){
title.pos = 1;
}
if (Pad(pad) == GO){
if (title.pos == 0){
title.mode = 2;
}
else if (title.pos == 1){
title.mode = 2;
}
}
}
//タイトル画面の描画
void Draw_title(){
DrawGraph(0, 0, title.Gra[0], TRUE);
DrawRectGraph(70, 250, 0, 0, 219, 177 / 2, title.Gra[1], TRUE, FALSE);
DrawRectGraph(70, 350, 0, 177 / 2, 219, 177 / 2, title.Gra[1], TRUE, FALSE);
if (title.pos == 0){
DrawGraph(30, 280, title.Gra[2], TRUE);
}
else if (title.pos == 1){
DrawGraph(30, 380, title.Gra[2], TRUE);
}
}
int title_xxx(){
if (CheckSoundMem(title.music[0]) == 0){
PlaySoundMem(title.music[0], DX_PLAYTYPE_BACK, TRUE);
}
if (title.mode == 2){
DeleteSoundMem(title.music[0]);
}
switch (title.mode){
case 0:{
load_title(); title.mode = 1; break;
}
case 1:{
Draw_title();
title_control(); break;
}
case 2:{
DeleteGraph(title.Gra[0]);
DeleteGraph(title.Gra[1]);
StopSoundMem(title.music[0]);
title.mode = 0;
if (title.pos == 0){
return 0;
}
else if (title.pos == 1){
return 1;
}
}
}
return -1;
}
/code
//タイトル画面で使う素材のロード
void load_title(){
title.Gra[0] = LoadGraph("画像/タイトル/タイトル1.png");
title.Gra[1] = LoadGraph("画像/タイトル/タイトルボタン.png");
title.Gra[2] = LoadGraph("画像/タイトル/矢印.png");
title.music[0] = LoadSoundMem("音/BGM/オープニング.mp3");
}
//タイトル画面での操作
void title_control(){
int pad = GetJoypadInputState(DX_INPUT_PAD1);
if (Pad(pad) == UP){
title.pos = 0;
}else if (Pad(pad) == DOWN){
title.pos = 1;
}
if (Pad(pad) == GO){
if (title.pos == 0){
title.mode = 2;
}
else if (title.pos == 1){
title.mode = 2;
}
}
}
//タイトル画面の描画
void Draw_title(){
DrawGraph(0, 0, title.Gra[0], TRUE);
DrawRectGraph(70, 250, 0, 0, 219, 177 / 2, title.Gra[1], TRUE, FALSE);
DrawRectGraph(70, 350, 0, 177 / 2, 219, 177 / 2, title.Gra[1], TRUE, FALSE);
if (title.pos == 0){
DrawGraph(30, 280, title.Gra[2], TRUE);
}
else if (title.pos == 1){
DrawGraph(30, 380, title.Gra[2], TRUE);
}
}
int title_xxx(){
if (CheckSoundMem(title.music[0]) == 0){
PlaySoundMem(title.music[0], DX_PLAYTYPE_BACK, TRUE);
}
if (title.mode == 2){
DeleteSoundMem(title.music[0]);
}
switch (title.mode){
case 0:{
load_title(); title.mode = 1; break;
}
case 1:{
Draw_title();
title_control(); break;
}
case 2:{
DeleteGraph(title.Gra[0]);
DeleteGraph(title.Gra[1]);
StopSoundMem(title.music[0]);
title.mode = 0;
if (title.pos == 0){
return 0;
}
else if (title.pos == 1){
return 1;
}
}
}
return -1;
}
/code
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: switch文の中でBGMが再生されない。
codeタグにミスが有ります。[]無いのでcodeタグがタグとして認識されていません。
プレビューで確認して下さいね。
提示されたコードなんですが、これは問題がない方ですか?
プレビューで確認して下さいね。
提示されたコードなんですが、これは問題がない方ですか?
ChenNel さんが書きました://タイトル画面で使う素材のロード void load_title(){ title.Gra[0] = LoadGraph("画像/タイトル/タイトル1.png"); title.Gra[1] = LoadGraph("画像/タイトル/タイトルボタン.png"); title.Gra[2] = LoadGraph("画像/タイトル/矢印.png"); title.music[0] = LoadSoundMem("音/BGM/オープニング.mp3"); } //タイトル画面での操作 void title_control(){ int pad = GetJoypadInputState(DX_INPUT_PAD1); if (Pad(pad) == UP){ title.pos = 0; }else if (Pad(pad) == DOWN){ title.pos = 1; } if (Pad(pad) == GO){ if (title.pos == 0){ title.mode = 2; } else if (title.pos == 1){ title.mode = 2; } } } //タイトル画面の描画 void Draw_title(){ DrawGraph(0, 0, title.Gra[0], TRUE); DrawRectGraph(70, 250, 0, 0, 219, 177 / 2, title.Gra[1], TRUE, FALSE); DrawRectGraph(70, 350, 0, 177 / 2, 219, 177 / 2, title.Gra[1], TRUE, FALSE); if (title.pos == 0){ DrawGraph(30, 280, title.Gra[2], TRUE); } else if (title.pos == 1){ DrawGraph(30, 380, title.Gra[2], TRUE); } } int title_xxx(){ if (CheckSoundMem(title.music[0]) == 0){ PlaySoundMem(title.music[0], DX_PLAYTYPE_BACK, TRUE); } if (title.mode == 2){ DeleteSoundMem(title.music[0]); } switch (title.mode){ case 0:{ load_title(); title.mode = 1; break; } case 1:{ Draw_title(); title_control(); break; } case 2:{ DeleteGraph(title.Gra[0]); DeleteGraph(title.Gra[1]); StopSoundMem(title.music[0]); title.mode = 0; if (title.pos == 0){ return 0; } else if (title.pos == 1){ return 1; } } } return -1; }
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: switch文の中でBGMが再生されない。
現在問題と思っている方のソースコードの提示もお願いします。
それが無いと分からないです・・。
それが無いと分からないです・・。
Re: switch文の中でBGMが再生されない。
{
}
はふつう書かないでしょう。本題とは関係ないかもしれませんが。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: switch文の中でBGMが再生されない。
case文の中でローカル変数を定義しなければよいのでは?
Re: switch文の中でBGMが再生されない。
オフトピック
>Dixqさん
そのとおりです。ローカル変数の宣言をしないなら書かなくとも問題ありません。
わたしは日記にも書いたとおり、処理の始まりと終わりが分かりやすくなるという理由で書いています。
>ふつう書かないでしょう
に「わたしは書くけど、これは普通じゃないのか?」と思ってofftopicで書きこみました。
そのとおりです。ローカル変数の宣言をしないなら書かなくとも問題ありません。
わたしは日記にも書いたとおり、処理の始まりと終わりが分かりやすくなるという理由で書いています。
>ふつう書かないでしょう
に「わたしは書くけど、これは普通じゃないのか?」と思ってofftopicで書きこみました。
初心者です