2012-03-08 22 views
0

MouseOverAreaを使用してボタンを作成しています。試行錯誤の末、InputListenerのメソッドをオーバーライドして、入力イベントが通知されたときに特定のアクションを実行できることに気付きました。InputListenerオブジェクトのメソッド内でアクションを実装する必要がありますか?

たとえば、カーソルがコンポーネント上にあるときにマウスの左ボタンを押したときの操作を行います。

@Override 
public void mousePressed(int button, int mx, int my) { 
    if (isMouseOver() && button == Input.MOUSE_LEFT_BUTTON) { 
     // Some magic happens 
    } 
} 

しかし、私は現在ゲームの状態を変更するようなことはできません。なぜなら、ゲームオブジェクトはまわりにはありません。私はこの問題を解決する多くの方法があることを知っていますが、私はこれを行うためのスリックな方法が何であるか知りたいと思います。

これらの方法は、このような動作に適していますか?

答えて

1

ゲームの状態を変更する1つの方法はブール状態を使用することです。ゲームやプレーヤーの状態を保持するブール変数です。

boolean isMovingUp, isMovingLeft, isMovingRight, isMovingDown; 

あなたは、イベントが発生し、あなたのゲームのクラスを取るもの、マウスやキーボードに応じて、真/偽にこれらを設定することができ、その後そのようなこれらの変数を、読んで:たとえば

if (isMovingUp) { 
    // do something 
    isMovingUp = !isMovingUp; 
} 

希望に役立つこと!

+0

お返事ありがとうございます。しかし、メソッド内でそのようなロジックを実装すると、特定の入力イベントが発生した後にのみこれらのフラグが更新されることを意味します。アクションを1回だけ実行したい場合はどうすればよいですか?アクションが終了したらフラグをリセットすることができますが、コンポーネント自体の外でそのようなことをするのは変です。 –

関連する問題