タイトルメニュー

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

タイトルメニュー

#1

投稿記事 by モアイ » 13年前

龍神録を元にタイトルメニューを作ろうとしたのですが、どうも挙動がおかしく、軽くキーを押しただけでとても速く項目を移動しているようになります。

コード:

#define GLOBAL_INSTANCE 
#include "myhelper.h"
#include "mymain.h"

//現在のキー入力処理を行う
extern int GetHitKeyStateAll_2();
//受け取ったキー番号の現在の入力状態を返す
extern int CheckStateKey(unsigned char Handle);
int func_state;
//メニュー項目を3つ作る
MENU menu[3] ={
		{ 80,100,"ゲームスタート"},	//タグの中身の順番で格納される。
		{ 100,150,"コンフィング"},
		{ 100,200,"ゲーム終了"},
};
int SelectNum;	//現在の選択番号
int cnt;
//ループで必ず行う3大処理
int ProcessLoop(){
    if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
    if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
    GetHitKeyStateAll_2();//現在のキー入力処理を行う
	GetHitPadStateAll();  //現在のパッド入力処理を行う
    return 0;
}
void Drawtitle(){
                // 計算フェーズ 

                if(CheckStatePad(configpad.down)>0){ // 下キーが押された瞬間だけ処理

                        SelectNum = ( SelectNum + 1 ) % 3; // 現在の選択項目を一つ下にずらす(ループする)
				}
				if( CheckStatePad(configpad.up)>0 ){ // 上キーが押された瞬間だけ処理

						SelectNum = ( SelectNum + 2 ) % 3; // 現在の選択項目を一つ上にずらす(逆ループする)
				}
				if( (CheckStatePad(configpad.down)>0) ||(CheckStatePad(configpad.up)>0) ){ // 下キーか、上キーが押された瞬間
                        for( int i=0; i<3; i++ ){              // メニュー項目数である3個ループ処理
                                if( i == SelectNum ){          // 今処理しているのが、選択番号と同じ要素なら
                                        menu[i].x = 80; // 座標を80にする
                                } else {                       // 今処理しているのが、選択番号以外なら
                                        menu[i].x = 100;// 座標を100にする
                                }
                        }
				 }

                // 描画フェーズ

                for( int i=0; i<3; i++ ){ // メニュー項目を描画
                        DrawFormatString( menu[i].x, menu[i].y, GetColor(255,255,255), menu[i].name );
                }


}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

	//load();//データロード
	 SelectNum = 0;
	cnt = 0;
	//画面サイズ(当たり判定用)の初期化
	Rect2D gf = { {-64,-64}, {640+64,480+64}, 768, 608};
	memcpy( &g_framerect, &gf, sizeof(Rect2D) );
	//スクロール開始点の初期化
	g_current_field_pos.x = 0;
	g_current_field_pos.y = 0;
	//ステージサイズの初期化
	Rect2D gs = { {0,0}, {639,479}, 640,480} ;
	memcpy( &g_stagesize, &gs, sizeof(Rect2D) );

	while(ProcessLoop()==0){//メインループ
            switch(func_state){
					case 0:
                           load();         //データロード
                           first_ini();//初回の初期化
                           func_state=10;
                           break;
					case 10:
							Drawtitle();
							break;
					case 100:
						   calc_ch();       //キャラクタ計算
                           graph_main();//描画メイン
						   stage1_main();
                           break;
					default:
                           printfDx("不明なfunc_state\n");
                           break;
                }
		if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
        ScreenFlip();//裏画面反映
    }

    DxLib_End();//DXライブラリ終了処理
    return 0;
}

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: タイトルメニュー

#2

投稿記事 by beatle » 13年前

モアイ さんが書きました:龍神録を元にタイトルメニューを作ろうとしたのですが、どうも挙動がおかしく、軽くキーを押しただけでとても速く項目を移動しているようになります。
これは質問でしょうか?それとも単なる報告ですか?
質問なのでしたら,質問文にしてくださらないと,本当は何を聞きたいのか良くわかりません.

「軽くキーを押しただけでとても速く項目を移動しているようになります」
「なるほど,そうなるのですね.分かりました.」
「・・・いや,教えてくれよ!」
「何を?」

となってしまいますよね.
やりたいのは「項目をゆっくり移動すること」なのか,「キーを押した瞬間だけ1つ移動して,それ以上押し続けても反応しなくすること」なのか.
そこらへんをはっきり質問してください.

モアイ

Re: タイトルメニュー

#3

投稿記事 by モアイ » 13年前

すみません。項目をゆっくり移動させる方法が知りたいです。
どうかお願いします。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: タイトルメニュー

#4

投稿記事 by みけCAT » 13年前

コード:

if(CheckStatePad(configpad.down)>0){

コード:

if(CheckStatePad(configpad.down)%30==1){
としたらどうでしょうか?
(30は適当な数字に、小さいほど速くなる)

コード:

if( CheckStatePad(configpad.up)>0 ){
も同様に

コード:

if( CheckStatePad(configpad.up)%30==1 ){
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

モアイ

Re: タイトルメニュー

#5

投稿記事 by モアイ » 13年前

なんとかなりました。ありがとうございます。

閉鎖

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