ボタンを押している間だけ発動するプログラムについて

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

ボタンを押している間だけ発動するプログラムについて

#1

投稿記事 by とっしー » 13年前

こんにちは。
早速ですが質問させていただきます。

現在、以下に示すような「zボタンを押している間だけ変数aがa+1になる」といったプログラムを作っています。

コード:

        a_add=0;
	if(CheckStateKey(KEY_INPUT_Z)==1 && old_z==0){
		a_add=1;
	} 
	if(CheckStateKey(KEY_INPUT_Z)==0 && old_z==1){
		a_add=-1;
	}
		a+=a_add;
        old_z=CheckStateKey(KEY_INPUT_Z);
このプログラムにより基本的には上手くいくのですが、たまにボタンを押したときにaに値が加えられなかったり、
反対にボタンを離したときにaに値が引かれなかったりし、zボタンを連打するとaの値がズレていってしまいます。

原因を色々考えましたが、「たまに」上手くいかない理由がまったくわかりません。
以上よろしくお願いしますm(__)m

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンを押している間だけ発動するプログラムについて

#2

投稿記事 by softya(ソフト屋) » 13年前

1フレームの周期はどのぐらいでしょか?
もし周期が余りに遅いとキーの押したり離したりを見逃す可能性があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: ボタンを押している間だけ発動するプログラムについて

#3

投稿記事 by h2so5 » 13年前

難しく考えすぎだと思います。

コード:

    int a_tmp = a;
    if(CheckStateKey(KEY_INPUT_Z) == 1){
        a_tmp++;
    } 
このコードでa_tmpを参照すれば、zボタンを押している間だけ変数aがa+1になるのと同じです。

とっしー

Re: ボタンを押している間だけ発動するプログラムについて

#4

投稿記事 by とっしー » 13年前

> softya(ソフト屋)さん
おそらく1/60[sec]だと思います。
この周期でキーの入力を見逃すというのはあるのでしょうか?

> h2so5さん
ありがとうございます。
たしかにシンプルなことなのに多少複雑なコードを書いてしまったかもしれません。
参考にしてみます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ボタンを押している間だけ発動するプログラムについて

#5

投稿記事 by softya(ソフト屋) » 13年前

とっしー さんが書きました:> softya(ソフト屋)さん
おそらく1/60[sec]だと思います。
この周期でキーの入力を見逃すというのはあるのでしょうか?
ないはずなので周期がおかしいか書かれていない部分がおかしいかどちらかですね。
あとCheckStateKey関数の中身が私の知っているものと違う可能性でしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

とっしー

Re: ボタンを押している間だけ発動するプログラムについて

#6

投稿記事 by とっしー » 13年前

> softya(ソフト屋)さん、h2so5さん
他の部分を変えたら解決しました。自分の確認不足で申し訳ございません。

ご丁寧にアドバイス頂きありがとうございました。
今後ともよろしくお願いします。

閉鎖

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