私は今、http://dixq.net/g/36.htmlをヒントに選択画面を作成しています。
なんとかできたので、次はそれをメニュー選択&決定でそれにあったプログラムを実行させたいのです。
例えばHELPだったらヘルプについて・・・など。
↓ 選択画面のプログラム実行の一部
if( Key[ KEY_INPUT_RETURN] == 1 || Key[ KEY_INPUT_SPACE] == 1){//エンターかスペースが押されていて
if(SelectNum==0){//メニューが一番上だったら
①NEWGAME(); //を実行
}else
if(SelectNum==1){ //メニューが2番目だったら
○○○○(); //を実行
}else
if(SelectNum==2){ //3番目だったら
②HELP();//を実行
}else
if(SelectNum==3){//4番目だったら
○○○○();//実行
}
}
次にNEWGAME();のことです。(上のソースの①)
今回はただ画像を出して、Bが押されたら終わるだけです。
while(ProcessMessage()==0 && CheckHitKey(KEY_INPUT_B)==0){
ClearDrawScreen();
Handle();//画像をメモリ保存&描く作業
}多すぎて書けませんが、こちらも同じようなものです。
Bが押されたら終了です。
こちらは前回の質問で出させてもらいました。
ClearDrawScreen();
Handle();//画像をメモリへ&描く作業
int x = 95;
SetDrawScreen( DX_SCREEN_BACK ) ;
do{
if(CheckHitKey(KEY_INPUT_B)==1){//もしBが押されたら
goto BB;//BBへ行く
}
DrawPixel(x,90,Cr);//点を描く
x++;
if(x==545)break;//xが545で終了
ScreenFlip();
}while(ProcessMessage()==0);
//このプログラムがダーと続いて・・・。
BB: WaitKey();//キーを待って終了・・・。goto文を使っているのはこのプログラムを何度も続けて線を描くためです。
そのためどこでBが押されてもいいようにしています。
本題です。
(①をNEWGAME()、②をHELP()とします。)
②を選択すると線を描き始めます。で、Bを押すとメニューへ戻ります。ばっちりです。
(メニュー画面)
次に①を選択すると画面がHandle()のおかげで描かれます。Bを押すとメニューへ。ばっちりです。
(メニュー画面)
もう一度②を選択します。
線を描き始めます。で、Bを押すとメニューへ戻ります。ばっちりです。
しかし。。。
最初に①を選択します。Handle()で描かれ、Bでメニュー・・・ばっちりです。
(メニュー画面)
次に②を選択します。線を描き、Bでメニューへ。ばっちりです。
(メニュー画面)
そして①を選択しますと、画面が出てこずメニュー画面のまま・・・。
しかも何度キー押してもメニュー画面は動かず、①の終了条件であるBを押すと
パッと、まるで生き返ったかのように動きます。
結論:なぜ①→②→①なら動くのに②→①→②なら動かないのかです。
ちなみにどんな順番でも②を選択した後に①は動きません。
それから①のプログラムが動かないのにBを押して戻るということは①のプログラムで終了した(?)のだと思うのです。
なぜ??①や②などの原因っぽいやつも消して動かしましたが変わらず・・・。
選択画面のif文の位置などを変えても変わらず・・・。
何が原因か分からないのでどこのソースを表示していいかわかりません;;
もうひとつ、、、このアプリケーションを立ち上げてしばらくすると
画面が真っ暗になります。しかし選択文は消えず(要は背景が消えるだけ)
①をしても②をしても画面は暗くなります。
長くなりまして大変申し訳ございません。
腕は初心者です。
環境
OS: Windows7
コンパイラ名 :VC++ 2008EE