キーエッジ

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

キーエッジ

#1

投稿記事 by rent » 14年前

質問させていただきます

環境はwindows7, visual 2010 C++, DXライブラリです。

ゲームのタイトル画面を作っているのですが、このタイトル画面だけがキーエッジ関数(キーが押された瞬間を検出する)、が反応しません

他のシーケンス、ゲームメインなどではちゃんと関数は動作してくれました。

以下、ソースコードです

コード:

グローバル変数
int NowKey;			//現在のキー
int OldKey;			//前回のキー
int KeyFlag;		//キーエッジ検出フラグ

/****************************************************************
*title();
*タイトル描画関数
*戻り値:なし、引数:なし
*****************************************************************/

void title(){

	int Posy;
	static int MenuNumber = 0;

	if(Key(buf[KEY_INPUT_DOWN])){
		if(++MenuNumber > 1) MenuNumber = 0;
	}
	if(Key(buf[KEY_INPUT_UP])){
		if(--MenuNumber < 0) MenuNumber = 1;
	}
	// 文字列の描画
	DrawString( 250 , 240 - 72 , "title" , 0xffffff );

	
	DrawString( 250 , 240 - 52 , "GAMESTRAT" , 0xffffff );


	DrawString( 250 , 240 - 32 , "END" , 0xffffff );

	Posy = MenuNumber*30;
	DrawTriangle(150,165+Posy,200,195+Posy,150,225+Posy,0xffffff,TRUE);

	ghum = 0;

	if(Key(buf[KEY_INPUT_RETURN])) gGameMode = 1;
}

/****************************************************************
*Key(int keyinput);
*キーエッジ検出関数
*戻り値:整数型、引数:int keyinput
*****************************************************************/
const int Key(int keyinput){
	// キー入力取得
		OldKey = NowKey ;
		NowKey = keyinput;
		KeyFlag = NowKey & ~OldKey;

		return KeyFlag;

}
自分がソースコードをいじって分かったのですが、キーエッジ関数が同じシーケンス内(同じ関数内)で2つ以上呼ばれると
キーエッジ関数は働かなくなるようです。
ですがどうしては分かりませんでした

説明不足な点がありましたら、追加で説明させていただきます
是非ともご教授よろしくお願いします。

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

Re: キーエッジ

#2

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

多分働かなくなる訳ではないと思います。
この関数の性質上、キーが押されてから最初にこの関数が呼び出された時のみ、押されたという結果が帰るようです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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