タイトル画面が固定しない悪夢・再臨

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
フランドールの義兄

タイトル画面が固定しない悪夢・再臨

#1

投稿記事 by フランドールの義兄 » 15年前

無事に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;
}

ひよこ

Re:タイトル画面が固定しない悪夢・再臨

#2

投稿記事 by ひよこ » 15年前

ループの最初で、mode = 0; int y = 100; と代入されているからです。
ループの外で宣言、代入をしましょう。

フランドールの義兄

Re:タイトル画面が固定しない悪夢・再臨

#3

投稿記事 by フランドールの義兄 » 15年前

ありがとうございました。教えてくれた方法を使って、さらにIf文でキーコントロール部分とムービー制御部分をそれぞれ覆ったら解決しました。

閉鎖

“C言語何でも質問掲示板” へ戻る