ページ 11

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

Posted: 2012年8月11日(土) 16:14
by とっしー
こんにちは。
早速ですが質問させていただきます。

現在、以下に示すような「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

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

Posted: 2012年8月11日(土) 16:24
by softya(ソフト屋)
1フレームの周期はどのぐらいでしょか?
もし周期が余りに遅いとキーの押したり離したりを見逃す可能性があります。

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

Posted: 2012年8月11日(土) 16:29
by h2so5
難しく考えすぎだと思います。

コード:

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

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

Posted: 2012年8月11日(土) 19:04
by とっしー
> softya(ソフト屋)さん
おそらく1/60[sec]だと思います。
この周期でキーの入力を見逃すというのはあるのでしょうか?

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

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

Posted: 2012年8月11日(土) 19:25
by softya(ソフト屋)
とっしー さんが書きました:> softya(ソフト屋)さん
おそらく1/60[sec]だと思います。
この周期でキーの入力を見逃すというのはあるのでしょうか?
ないはずなので周期がおかしいか書かれていない部分がおかしいかどちらかですね。
あとCheckStateKey関数の中身が私の知っているものと違う可能性でしょうか。

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

Posted: 2012年8月12日(日) 14:16
by とっしー
> softya(ソフト屋)さん、h2so5さん
他の部分を変えたら解決しました。自分の確認不足で申し訳ございません。

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