ゲームの途中に流れる音楽について
ゲームの途中に流れる音楽について
僕は今、ゲームの途中に流れる音楽が、WAvを使った音楽ファイルからMp3を使った音楽ファイルに変更しようとしているのですが、うまくいきません。どうやったら、変えられますか?プログラムも一応変えました。
Re: ゲームの途中に流れる音楽について
プログラムを変えましたと言われましても・・・
そのプログラムを見なければお答えしようがありません。
質問に答えてもらうために必要だと思うコードを
のせてみてください。
そのプログラムを見なければお答えしようがありません。
質問に答えてもらうために必要だと思うコードを
のせてみてください。
Re: ゲームの途中に流れる音楽について
すいません。これから載せます。
#include "spgame.h"
//グローバル変数
struct CharaData jikidata;
struct CharaData jitama[3];
int trigger = 0;
struct CharaData tekidata[50];
int gstate = GAME_TITLE;
int gametitlejpg;
unsigned int starttime;
float idouryou[20];
unsigned int animcounter = 0;
int backjpg;
int openmusic, backmusic; //バックで再生する音楽
int clip1,clip2,clip3,clip4; //効果音
int clip5,clip6;
int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC)
{
ChangeWindowMode(TRUE); //ウィンドウモードで起動
if(DxLib_Init() == -1) return(-1); //DXライブラリ初期化
gametitlejpg = LoadGraph("media\\gametitle.jpg");
JicharaLoad();
TekiLoad();
backjpg = LoadGraph("media\\back01.jpg");
//音声読み込み
openmusic = LoadSoundMem("media\\music16.wav");
backmusic = LoadSoundMem("media\\04_RayCyclone.mp3");
clip1 = LoadSoundMem("media\\bom35.wav");
clip2 = LoadSoundMem("media\\don18_c.wav");
clip3 = LoadSoundMem("media\\shoot22.wav");
clip4 = LoadSoundMem("media\\power33.wav");
clip5 = LoadSoundMem("media\\hit_p07.wav");
clip6 = LoadSoundMem("media\\gun11_r.wav");
SetFrameRate();
SetDrawScreen(DX_SCREEN_BACK);
PlaySoundMem(openmusic, DX_PLAYTYPE_LOOP);
while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
ClsDrawScreen();
switch(gstate){
case GAME_TITLE:
DrawGameTitle();
break;
case GAME_MAIN:
DrawGameMain();
break;
case GAME_OVER:
DrawGameOver();
break;
case GAME_CLEAR:
DrawGameClear();
break;
}
ScreenFlip();
animcounter = animcounter + 1;
}
DxLib_End(); //DXライブラリ終了処理
return(0); //終了
}
Re: ゲームの途中に流れる音楽について
うまくいきませんと言われましても『何』が『どのように』うまくいかないのかを書いていただきませんと答えようがありません
一応見た感じでは再生されているのはopenmusic、つまりmedia/music16.wavの様ですが…………
一応見た感じでは再生されているのはopenmusic、つまりmedia/music16.wavの様ですが…………
Re: ゲームの途中に流れる音楽について
このコードだとbackmusicの再生に関する所がありませんが、再生に関するところも
見せてくれると助かります。
見せてくれると助かります。
Re: ゲームの途中に流れる音楽について
何度もすいません。問題なのは、「backmusic = LoadSoundMem("media\\music04.wav");」から、「backmusic = LoadSoundMem("media\\04_RayCyclone.mp3");」に変えた部分です。
Re: ゲームの途中に流れる音楽について
考えられる可能性としては
1. 04_RayCyclone.mp3 と music04.wavが同じ音源である
2. どこかで backmusic が上書きされた
3. ソースファイルが保存されていない
ぐらいですか……
とりあえずこのソースコードだけでは判断しかねます
VC++をお使いならば
backmusic か music04.wav で検索をかけてみてはどうですか?
1. 04_RayCyclone.mp3 と music04.wavが同じ音源である
2. どこかで backmusic が上書きされた
3. ソースファイルが保存されていない
ぐらいですか……
とりあえずこのソースコードだけでは判断しかねます
VC++をお使いならば
backmusic か music04.wav で検索をかけてみてはどうですか?
Re: ゲームの途中に流れる音楽について
No.5で涼雅さんが、No.6でとっちさんが指摘していますように、backmusicが「再生」されている箇所が見つかりません。ファイルから音データをメモリに読み込む処理は確かに記述されていますが、そのデータを再生している命令が見当たらないということです。
その部分を提示して下さい。
その部分を提示して下さい。
Re: ゲームの途中に流れる音楽について
すいません。長らく作ってかなり年月がたっていたので、再生を命令しているところと思われるところのソースコードをすべて投稿します。
これです。
//●ゲームタイトル画面の表示
void DrawGameTitle(){
DrawGraph(0,60,gametitlejpg,FALSE);
int col = GetColor(255,0,255);
SetFontSize(32);
SetFontThickness(9);
int x = 320 - GetDrawStringWidth("PUSH Z KEY",12)/2;
DrawString(x,300,"PUSH Z KEY", col);
ScreenFlip();
WaitKey();
gstate = GAME_MAIN;
JicharaInit();
TekiInit();
StopSoundMem(openmusic);
PlaySoundMem(clip4, DX_PLAYTYPE_BACK);
PlaySoundMem(backmusic, DX_PLAYTYPE_LOOP);
}
//●ゲーム本体の実行
void DrawGameMain(){
DrawGraph(0,0,backjpg,FALSE);
JicharaMove(TRUE);
JitamaMove();
TekiMove(TRUE);
TekitamaMove();
DrawBakuen();
if(AtariHantei() == 1) {
gstate = GAME_OVER;
starttime = GetNowCount();
StopSoundMem(backmusic);
PlaySoundMem(clip1,DX_PLAYTYPE_BACK);
}
if(IsGameClear() == 1) {
gstate = GAME_CLEAR;
starttime = GetNowCount();
StopSoundMem(backmusic);
}
}
//●ゲームオーバー画面の表示
void DrawGameOver(){
DrawGraph(0,0,backjpg,FALSE);
JicharaMove(FALSE);
TekiMove(FALSE);
//爆炎表示
if(jbakuendata.life==0){
jbakuendata.life=16;
jbakuendata.x = jikidata.x + (GetRand(64)-32);
jbakuendata.y = jikidata.y + (GetRand(64)-32);
}
if(jbakuendata.life>0){
int a = animcounter/4 % jbakuendata.animpat;
DrawGraph (jbakuendata.x, jbakuendata.y, jbakuendata.ghandle[a], TRUE);
jbakuendata.life = jbakuendata.life - 1;
}
int col = GetColor(255,0,0);
SetFontSize(100);
SetFontThickness(9);
ChangeFontType(DX_FONTTYPE_EDGE);
int x = 320 - GetDrawStringWidth("GAMEOVER",8)/2;
DrawString(x,160,"GAMEOVER", col);
if(GetNowCount() - starttime > 5000){
gstate = GAME_TITLE;
PlaySoundMem(openmusic, DX_PLAYTYPE_LOOP);
}
}
//●ゲームクリアー画面の表示
void DrawGameClear(){
DrawGraph(0,0,backjpg,FALSE);
JicharaMove(FALSE);
TekiVanish();
int col = GetColor(0,255,255);
SetFontSize(100);
SetFontThickness(9);
ChangeFontType(DX_FONTTYPE_EDGE);
int x = 320 - GetDrawStringWidth("GAMECLEAR",9)/2;
DrawString(x,160,"GAMECLEAR", col);
if(GetNowCount() - starttime > 5000){
gstate = GAME_TITLE;
PlaySoundMem(openmusic, DX_PLAYTYPE_LOOP);
}
}
void SetFrameRate(){
float frametime = 0 ;
unsigned int s = GetNowCount(); //計測開始時間をsに代入
for(int i = 0 ; i < 30 ; i ++ )
{
ScreenFlip();
unsigned int e = GetNowCount(); //計測終了時間をeに代入
frametime = frametime + e - s ;
s = e ;
}
frametime = frametime/30 ; //30回採取した経過時間の平均を取る
for(int i=1; i<20; i=i+1){
idouryou[i] = i / frametime * 16.67;
}
}
Re: ゲームの途中に流れる音楽について
media/music04.wavを一時的に、別の場所へ移動することは可能ですか。
可能であれば、別の場所へ移動させてから、コンパイル→実行してみてください。
それでも
コンパイラは何を使用していますか。
可能であれば、別の場所へ移動させてから、コンパイル→実行してみてください。
それでも
が起きるようであれば、ソースの変更が適用されていないと思います。ティガ さんが書きました: 新しい曲が流れるようにするプログラムとその曲のデータも入れたのに前からある、「music04」が流れること
コンパイラは何を使用していますか。
Re: ゲームの途中に流れる音楽について
BGMについては皆目検討もつきませんが
それよりもまずコードを整理する必要がありますね……
まず一つ目はWaitKeyが使われていることです詳しくはこちらを参考にしてください。
二つ目は計算部分と描画部分が分離されていないことですね。
細かいと思うかもしれませんが意外と重要なことです
三つ目は似たような処理(中央揃えで文字を表示する部分など)を関数に纏めることです。
頻繁に使う処理はサブルーチン化してしまいましょう
それよりもまずコードを整理する必要がありますね……
まず一つ目はWaitKeyが使われていることです詳しくはこちらを参考にしてください。
二つ目は計算部分と描画部分が分離されていないことですね。
細かいと思うかもしれませんが意外と重要なことです
三つ目は似たような処理(中央揃えで文字を表示する部分など)を関数に纏めることです。
頻繁に使う処理はサブルーチン化してしまいましょう