タイトル画面が固定しない悪夢・再臨
Posted: 2009年11月19日(木) 20:44
無事にF1キーを離してもタイトル画面に固定することはできたのですが、BGMを再生し始めた途端、再びオープニングムービーに戻ってしまいます。しかも、メニュー操作のコードを打ったのも無視します。(↑キーや↓キーを打っても■が動かない)
全コードを記述します。改善方法を教えてください。
#define GLOBAL_INSTANCE
#include "../include/GV.h"
int Key[256];
int Cr = GetColor(0, 255, 255);
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[/url]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
int mode;
if(Key[KEY_INPUT_F1] == 0 && Key[KEY_INPUT_F2] == 0 && Key[KEY_INPUT_F3] == 0 && CheckSoundFile() == 0){
mode = 0;
}
else if(Key[KEY_INPUT_F1] == 1 || Key[KEY_INPUT_F1] == 1 && Key[KEY_INPUT_F2] == 1 && Key[KEY_INPUT_F3] == 1){
mode = 1;//Normal(ノーマル・東方)モード
}
else if(Key[KEY_INPUT_F2] == 1){
mode = 2;//Mega Man(ロックマン)モード
}
else{
mode = 3;//Shohta(翔ちゃんセレクト)モード
}
switch(mode){
case 0:
//オープニングムービー
PlayMovie("../../dat/movie/ACDL_Opening.wmv", 1, DX_MOVIEPLAYTYPE_BCANCEL);
if(GetMovieStateToGraph == 0){
mode = 1;
}
break;
case 1:
PlayMusic("../../dat/music/1/東方空中戦.mid", DX_PLAYTYPE_LOOP) ;
mode = 1;
break;
case 2:
PlayMusic("../../dat/music/1/Mega_Man_Mode/Title.mp3", DX_PLAYTYPE_LOOP);
mode = 2;
break;
case 3:
//PlayMusic("../../dat/music/1/Shohta/???.mp3", DX_PLAYTYPE_LOOP);
mode = 3;
break;
}
//たゐとる画面
LoadGraphScreen(0, 0, "../../dat/img/1/Title.bmp", TRUE);
DrawString(68, 48, "東方空中戦", Cr );
Cr = GetColor(255, 255, 0);
DrawString(48,68, "Air Combat Defense Line", Cr );
//たゐとる宣言
PlaySoundFile("", DX_PLAYTYPE_NORMAL) ;
PlaySoundFile("", DX_PLAYTYPE_NORMAL) ;
//めにゅ。
int y = 100;
DrawString(150, y, "■", Cr);
Cr = GetColor(0, 255, 255);
DrawString(170, 100, "Story", Cr);
DrawString(170, 120, "Training", Cr);
DrawString(170, 140, "Learning", Cr);
DrawString(170, 160, "Option", Cr);
DrawString(170, 180, "Library", Cr);
DrawString(170, 200, "Exit", Cr);
//キー操作(めにゅ)
if(Key[KEY_INPUT_DOWN] == 1 || ( Key[KEY_INPUT_DOWN] % 5 == 0 && Key[KEY_INPUT_DOWN] > 30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y += 20;
if(y == 200){// y座標が200なら(選択が一番下なら)
y=100;// 選択座標を一番上に
}
}
if(Key[KEY_INPUT_UP] == 1 || ( Key[KEY_INPUT_UP] % 5 == 0 && Key[KEY_INPUT_UP] > 30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y -= 20;
if(y == 100){// y座標が100なら(選択が一番上なら)
y = 200;// 選択座標を一番下に
}
}
ScreenFlip();//裏画面反映
}
DxLib_End();
return 0;
}
全コードを記述します。改善方法を教えてください。
#define GLOBAL_INSTANCE
#include "../include/GV.h"
int Key[256];
int Cr = GetColor(0, 255, 255);
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[/url]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
int mode;
if(Key[KEY_INPUT_F1] == 0 && Key[KEY_INPUT_F2] == 0 && Key[KEY_INPUT_F3] == 0 && CheckSoundFile() == 0){
mode = 0;
}
else if(Key[KEY_INPUT_F1] == 1 || Key[KEY_INPUT_F1] == 1 && Key[KEY_INPUT_F2] == 1 && Key[KEY_INPUT_F3] == 1){
mode = 1;//Normal(ノーマル・東方)モード
}
else if(Key[KEY_INPUT_F2] == 1){
mode = 2;//Mega Man(ロックマン)モード
}
else{
mode = 3;//Shohta(翔ちゃんセレクト)モード
}
switch(mode){
case 0:
//オープニングムービー
PlayMovie("../../dat/movie/ACDL_Opening.wmv", 1, DX_MOVIEPLAYTYPE_BCANCEL);
if(GetMovieStateToGraph == 0){
mode = 1;
}
break;
case 1:
PlayMusic("../../dat/music/1/東方空中戦.mid", DX_PLAYTYPE_LOOP) ;
mode = 1;
break;
case 2:
PlayMusic("../../dat/music/1/Mega_Man_Mode/Title.mp3", DX_PLAYTYPE_LOOP);
mode = 2;
break;
case 3:
//PlayMusic("../../dat/music/1/Shohta/???.mp3", DX_PLAYTYPE_LOOP);
mode = 3;
break;
}
//たゐとる画面
LoadGraphScreen(0, 0, "../../dat/img/1/Title.bmp", TRUE);
DrawString(68, 48, "東方空中戦", Cr );
Cr = GetColor(255, 255, 0);
DrawString(48,68, "Air Combat Defense Line", Cr );
//たゐとる宣言
PlaySoundFile("", DX_PLAYTYPE_NORMAL) ;
PlaySoundFile("", DX_PLAYTYPE_NORMAL) ;
//めにゅ。
int y = 100;
DrawString(150, y, "■", Cr);
Cr = GetColor(0, 255, 255);
DrawString(170, 100, "Story", Cr);
DrawString(170, 120, "Training", Cr);
DrawString(170, 140, "Learning", Cr);
DrawString(170, 160, "Option", Cr);
DrawString(170, 180, "Library", Cr);
DrawString(170, 200, "Exit", Cr);
//キー操作(めにゅ)
if(Key[KEY_INPUT_DOWN] == 1 || ( Key[KEY_INPUT_DOWN] % 5 == 0 && Key[KEY_INPUT_DOWN] > 30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y += 20;
if(y == 200){// y座標が200なら(選択が一番下なら)
y=100;// 選択座標を一番上に
}
}
if(Key[KEY_INPUT_UP] == 1 || ( Key[KEY_INPUT_UP] % 5 == 0 && Key[KEY_INPUT_UP] > 30)){
// たった今押したか、30カウンター以上押しっぱなしかつ5回に一度
y -= 20;
if(y == 100){// y座標が100なら(選択が一番上なら)
y = 200;// 選択座標を一番下に
}
}
ScreenFlip();//裏画面反映
}
DxLib_End();
return 0;
}