トップページ > 過去ログ > 記事閲覧
教えてください!
名前:留学生 日時: 2012/04/20 10:26

/*main.cpp*/ #include "DxLib.h" #include "main.h" #include "menu.h" int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { int Map; SetGraphMode(800,580,16); if(DxLib_Init() == -1) //DXライブラリ初期化 { return -1; //エラーが起きたらプログラム終了 } SetDrawScreen(DX_SCREEN_BACK); //グラフィックの描画先を裏画面にセット Map = LoadGraph("img/map.png"); DrawGraph (0,0,Map, TRUE); while(1){ Menu_p(); } while(CheckHitKey(KEY_INPUT_ESCAPE)== 0) //ESCキーが押されるまで待つ { if(ProcessMessage() == 1) { break; //エラーが発生したらループを抜ける } } DxLib_End(); return 0; } =============== /*menu.cpp*/ #include "DxLib.h" #include "menu.h" //#include "main.h" int Mouse; int MenuFlag = 0; int ImgSize = 1.0; int Menu; void Menu_p() { Menu = LoadGraph("dat/img/menu.png"); //while(1) { //while(裏画面を表画面に反映&&メッセージ処理) while(!ScreenFlip()&& !ProcessMessage()) { int MouseX, MouseY; Mouse = GetMouseInput(); //マウスの入力状態取得 GetMousePoint(&MouseX,&MouseY); //マウスの座標取得 int MenuX = MouseX + 50 , MenuY = MouseY + 30, MenuW = 82 , MenuH = 38; if(Mouse & MOUSE_INPUT_RIGHT) { DrawRotaGraph(MouseX+50, MouseY+27,ImgSize,0.0,Menu,TRUE); //絵をかくat(マウスの右側) MenuFlag = 1; } if((MouseX<MenuX&&MouseY<MenuY)||(MouseX>MenuW&&MouseY>MenuH)) { MenuFlag = 0; } if(CheckHitKey(KEY_INPUT_ESCAPE)== 0) break; } } } =========== /*main.h*/ #ifndef _MAIN_H_ #define _MAIN_H_ #endif ========== /*menu.h*/ #ifndef _MENU_H_ #define _MENU_H_ extern void Menu_p(); extern int Menu; #endif ========== どうしてウィンドがESCを押しても消せませんか。 教えてくださいm(__)m

Page: 1 |

Re: 教えてください! ( No.1 )
名前:獅子 日時:2012/04/20 13:23

while文の使い方が間違っています。他にも問題点はありますが、とりあえず1つずつ説明しましょう。 まず、if(CheckHitKey(KEY_INPUT_ESCAPE)== 0)は「エスケープが押されていなかったら」になってしまっています。 if(CheckHitKey(KEY_INPUT_ESCAPE)== 1)にしてください。 また、Menu_p()関数内で、while(1)を抜けることができません。breakはループを全て抜けるのではなく、一つループを抜けます。無限ループにループを混ぜてはいけません。 ぱっと見ただけでもwhileが4つある時点でおかしいです。とりあえず書きなおしてみたので、違いを確認してみてください。 /*main.cpp*/ #include "DxLib.h" #include "main.h" #include "menu.h" int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { int Map; SetGraphMode(800,580,16); if(DxLib_Init() == -1) //DXライブラリ初期化 { return -1; //エラーが起きたらプログラム終了 } SetDrawScreen(DX_SCREEN_BACK); //グラフィックの描画先を裏画面にセット Map = LoadGraph("img/map.png"); DrawGraph (0,0,Map, TRUE); Menu_p() // ループ。ただし、本来ならメインルーはメイン関数に書くべきですが。 DxLib_End(); return 0; } =============== /*menu.cpp*/ #include "DxLib.h" #include "menu.h" //#include "main.h" int Mouse; int MenuFlag = 0; int ImgSize = 1.0; int Menu; void Menu_p() { Menu = LoadGraph("dat/img/menu.png"); //while(裏画面を表画面に反映&&メッセージ処理) while(!ScreenFlip() && !ProcessMessage()) { int MouseX, MouseY; Mouse = GetMouseInput(); //マウスの入力状態取得 GetMousePoint(&MouseX,&MouseY); //マウスの座標取得 int MenuX = MouseX + 50 , MenuY = MouseY + 30, MenuW = 82 ,MenuH = 38; if(Mouse & MOUSE_INPUT_RIGHT) { DrawRotaGraph(MouseX+50, MouseY+27,ImgSize,0.0,Menu,TRUE); //絵をかくat(マウスの右側) MenuFlag = 1; } if((MouseX<MenuX&&MouseY<MenuY)||(MouseX>MenuW&&MouseY>MenuH)) { MenuFlag = 0; } if(CheckHitKey(KEY_INPUT_ESCAPE)== 1){ // Escキーが押されていたらループをひとつ抜ける break; } } } =========== /*main.h*/ #ifndef _MAIN_H_ #define _MAIN_H_ #endif ========== /*menu.h*/ #ifndef _MENU_H_ #define _MENU_H_ extern void Menu_p(); extern int Menu; #endif ==========
Re: 教えてください! ( No.2 )
名前:留学生 日時:2012/04/21 12:59

本当にありがとうございました。m(__)m 後で読みます。
Re: 教えてください! ( No.3 )
名前:留学生(解決) 日時:2012/04/22 12:16

もう一度見ました、お時間をいただきまして、誠にありがとうございました。

Page: 1 |