ゲームの途中に流れる音楽について
Posted: 2012年3月15日(木) 19:25
僕は今、ゲームの途中に流れる音楽が、WAvを使った音楽ファイルからMp3を使った音楽ファイルに変更しようとしているのですが、うまくいきません。どうやったら、変えられますか?プログラムも一応変えました。
#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); //終了
}
//●ゲームタイトル画面の表示
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;
}
}
が起きるようであれば、ソースの変更が適用されていないと思います。ティガ さんが書きました: 新しい曲が流れるようにするプログラムとその曲のデータも入れたのに前からある、「music04」が流れること