Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

if文の処理が行われない

javaでゲームを作っています。

JPanelを継承したクラス内でスレッドを作成し、スレッド内をwhileループしてという至って普通のものです。

キーの処理にクラスを作っていて、

class KeyManage {
    public static final int KEY_RELEASED            = 0;
    public static final int KEY_PRESSED                = 1;
    public static final int KEY_LONGPRESSED    = 2;
    private int KEY_STATE;
    
    public KeyManage() {
        KEY_STATE = KEY_RELEASED;
    }
    public void Press() {
        if( KEY_STATE == KEY_PRESSED || KEY_LONGPRESSED ) {
            KEY_STATE = KEY_LONGPRESSED;
        } else if( KEY_STATE == KEY_RELEASED ) {
            KEY_STATE = KEY_PRESSED;
        }
    }
    public void Release() {
        KEY_STATE = KEY_RELEASED;
    }
    
    public int getKeyState() {
        return KEY_STATE;
    }
}

上のものです。
これをキーが押されたときにPress()やRelease()を呼び出して処理をしています。

whileループ内でゲームの処理の更新を行うメソッドを呼び出すのですが、その中で

private void GameUpdate() {
    //System.out.println( KEY_UP.getKeyState() );
    if( KEY_UP.getKeyState() == KeyManage.KEY_LONGPRESSED ) {
        System.out.println( "はい" );
        }
}

※KEY_UPはキー処理クラスのインスタンス
とするとif文内の処理が行われません。
ただ、if文前にSystem.out.println( KEY_UP.getKeyState() );を追加するとif文の処理が行われます。

上キーの状態を表示しているかしていないかで何かが変わるわけでもないのにif文の処理が行われるかどうかが変わってしまって困っています。
お願いします。

1

回答

3715

閲覧

1件の回答

評価

0

変数をすべて大文字の名前にすると、定数と見分けが付かな
いのでやめた方がいい。
Oracleの出している標準のコード規約を参照。

全然試してないが、別スレッドで動いているということで、
フィールドへ反映されるタイミングではないのかな。
ifに入る前にスリープがあるとどうなんだろう。

関係ないが、そういう状態を示す定数にはenumを使う方がい
い。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。