初歩的な質問なのかもしれませんが
33章の選択画面で選んだとき
次のページ(新しいページ?)に飛ぶまた戻るの感覚がわからないのですが
どのように考えればばよいのでしょうか
よろしくお願いします
メニュー選択画面について
Re:メニュー選択画面について
switch文でうまくできそうではないですか?
たとえば、
途中のfunc関数は適当に作ってあります^^;
このように、ステートのようなもので制御してあげれば、
(プログラム中ではswitch文のところです)
次のページに飛ぶ(?)ようなことができますよ^^
短時間で作ったものなので、改善の余地はたくさんあるかとは思いますが、
基本的な考えはこれで十分かと思います。
(余談)
無駄に関数を作りすぎちゃいました(笑)
たとえば、
#include "DxLib.h" int state = 0; int Key[256]; int White , y=100; //色とy座標の宣言 int GetHitKeyStateAll_2(int KeyStateBuf[/url]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key==1) KeyStateBuf++; else KeyStateBuf=0; } return 0; } void char_disp(int White,int y){ DrawString( 150 , y , "■" , White ); DrawString( 170 , 100 , "NEW GAME" , White ); DrawString( 170 , 120 , "CONTINUE1" , White ); DrawString( 170 , 140 , "CONTINUE2" , White ); DrawString( 170 , 160 , "CONTINUE3" , White ); DrawString( 170 , 180 , "CONTINUE4" , White ); DrawString( 170 , 200 , "CONTINUE5" , White ); DrawString( 170 , 220 , "CONTINUE6" , White ); DrawString( 170 , 240 , "LOG OUT" , White ); } /*キー入力制御関数*/ void key_calc(){ if( Key[KEY_INPUT_DOWN]==1 ||( Key[KEY_INPUT_DOWN]%5==0 && Key[KEY_INPUT_DOWN]>30)){ // たった今押したか、30カウンター以上押しっぱなしかつ5回に一度 y+=20; if(y==260) // y座標が260なら(選択が一番下なら) y=100; // 選択座標を一番上に } if(Key[KEY_INPUT_Z]==1){ switch (y) { case 100: state=1; break; case 120: state=2; break; case 140: state=3; break; case 160: state=4; break; case 180: state=5; break; case 200: state=6; break; case 220: state=7; break; case 240: state=8; break; default: state=0; break; } } } void func1(){ DrawString(170, 160, "初めからだよ~ん", White); if(Key[KEY_INPUT_X]==1){ state=0; } } void func2(){ DrawString(170, 160, "メニュー1だよ~ん", White); if(Key[KEY_INPUT_X]==1){ state=0; } } void func3(){ DrawString(170, 160, "メニュー2だよ~ん", White); if(Key[KEY_INPUT_X]==1){ state=0; } } void func4(){ DrawString(170, 160, "メニュー3だよ~ん", White); if(Key[KEY_INPUT_X]==1){ state=0; } } void func5(){ DrawString(170, 160, "メニュー4だよ~ん", White); if(Key[KEY_INPUT_X]==1){ state=0; } } void func6(){ DrawString(170, 160, "メニュー5だよ~ん", White); if(Key[KEY_INPUT_X]==1){ state=0; } } void func7(){ DrawString(170, 160, "メニュー6だよ~ん", White); if(Key[KEY_INPUT_X]==1){ state=0; } } void func8(){ DrawString(170, 160, "ほんとにおわっちゃうの?", White); if(Key[KEY_INPUT_X]==1){ state=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;//初期化と裏画面化 White = GetColor( 255 , 255 , 255 ) ; //色の取得 while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){ //↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない key_calc(); /*メニュー画面制御*/ switch(state){ case 0: char_disp(White,y); break; //メインメニュー case 1: func1(); break; case 2: func2(); break; case 3: func3(); break; case 4: func4(); break; case 5: func5(); break; case 6: func6(); break; case 7: func7(); break; case 8: func8(); break; default : state = 0; break; } ScreenFlip();//裏画面反映 } DxLib_End(); return 0; }
途中のfunc関数は適当に作ってあります^^;
このように、ステートのようなもので制御してあげれば、
(プログラム中ではswitch文のところです)
次のページに飛ぶ(?)ようなことができますよ^^
短時間で作ったものなので、改善の余地はたくさんあるかとは思いますが、
基本的な考えはこれで十分かと思います。
(余談)
無駄に関数を作りすぎちゃいました(笑)
Re:メニュー選択画面について
なるほどーーこういいう考え方ができるんですねー
とても助かりましたありがとうございました
もう一つ質問なんですけど実行してみて 下キーを押しながらZキーを押すとページが
移ってしまうんですけどどう改善すればよろしいんでしょうか
たびたび申し訳ありませんよろしくお願いします
とても助かりましたありがとうございました
もう一つ質問なんですけど実行してみて 下キーを押しながらZキーを押すとページが
移ってしまうんですけどどう改善すればよろしいんでしょうか
たびたび申し訳ありませんよろしくお願いします
Re:メニュー選択画面について
Zキー判定のところを
もっとも、矢印キー押しているときも決定ができる(ランダム選択な感じ)というのも有りかもしれませんけどね。
if (![矢印キーが押されているか] && [Zキーが押されているか]) { // 移動 switch () { ... } }のようにすればよいと思います。
もっとも、矢印キー押しているときも決定ができる(ランダム選択な感じ)というのも有りかもしれませんけどね。
Re:メニュー選択画面について
ありがとうございます
やってみたところ矢印を押しながらZを押すと移動する
現象は改善されましたが
下 を押したのち Zを押すと移動してしまいます
どうしたらよいでしょうか
やってみたところ矢印を押しながらZを押すと移動する
現象は改善されましたが
下 を押したのち Zを押すと移動してしまいます
どうしたらよいでしょうか
Re:メニュー選択画面について
初めまして。
その“移動”と言うのは、貴方の要望であった「次のページ(新しいページ?)に飛ぶ」ことではないのでしょうか。
ですから、「移動してしまいます」と言われますと、何がしたかったのか謎くなってしまいますw
私の勘違いでしたらすいません。
その“移動”と言うのは、貴方の要望であった「次のページ(新しいページ?)に飛ぶ」ことではないのでしょうか。
ですから、「移動してしまいます」と言われますと、何がしたかったのか謎くなってしまいますw
私の勘違いでしたらすいません。
Re:メニュー選択画面について
上記のプログラムでは、キー入力判定をする関数をswitch文の外に出してしまっているため、 状態遷移しても↓を押せばカーソルが移動してしまう仕様になってますね。 【1】初期状態 ------------------ ■NEW GAME CONTINUE1 CONTINUE2 CONTINUE3 CONTINUE4 CONTINUE5 CONTINUE6 LOG OUT ------------------ 【2】Zキーを押す ----------------- 初めからだよ~ん ----------------- 【3】この状態のまま↓キーを押す ----------------- 初めからだよ~ん ----------------- 【4】Xを押してメインに戻ると、カーソルが移動している。 ------------------ NEW GAME CONTINUE1 CONTINUE2 CONTINUE3 CONTINUE4 ■CONTINUE5 CONTINUE6 LOG OUT ------------------ key_calc();は、case0のところに入れたほうが良いのではないのでしょうか。
Re:メニュー選択画面について
最近忙しくて返事が返せませんでした。
本当に申し訳ないです><
上記のプログラムは、ゲームプログラミングの館33章をそのまま流用し、
ページ移動のプログラムを付け足しただけなので、
下キーを押したままでもZキーに反応してしまいます。
Aceさんのおっしゃるように変更すれば、改善されます
(すでに確認済みですね^^;)
>conioさん
解説とご指摘ありがとうございます^^
一応、上記のプログラムを改造してキー入力をすべてのcaseにも反映できるようにと、
switchの外に出しちゃいました^^;
ここではkey_calc();はcase 0に入れた方がよかったですねorz
本当に申し訳ないです><
上記のプログラムは、ゲームプログラミングの館33章をそのまま流用し、
ページ移動のプログラムを付け足しただけなので、
下キーを押したままでもZキーに反応してしまいます。
Aceさんのおっしゃるように変更すれば、改善されます
(すでに確認済みですね^^;)
>conioさん
解説とご指摘ありがとうございます^^
一応、上記のプログラムを改造してキー入力をすべてのcaseにも反映できるようにと、
switchの外に出しちゃいました^^;
ここではkey_calc();はcase 0に入れた方がよかったですねorz