2016-12-25 7 views
1

私はJavaでゲームを作っており、マウス入力を追加しました。ここに私のコードです。Java - マウスをクリックすると、tick()ループによって複数のアクションが発生します

public class MouseInput implements MouseListener, MouseMotionListener { 

public static boolean leftPressed; 
public static boolean rightPressed; 

public MouseInput(){ 

} 
public void tick(){ 
    if(leftPressed){ 
     System.out.println("left pressed"); 
    } 
} 

@Override 
public void mousePressed(MouseEvent e) { 
    if(e.getButton() == MouseEvent.BUTTON1){ 
     leftPressed = true; 

    }else if(e.getButton() == MouseEvent.BUTTON3){ 
     rightPressed = true; 

    } 
} 

@Override 
public void mouseReleased(MouseEvent e) { 
    if(e.getButton() == MouseEvent.BUTTON1) 
     leftPressed = false; 
    else if(e.getButton() == MouseEvent.BUTTON3) 
     rightPressed = false; 

} 

ゲッター、セッター、抽象メソッドなど、この質問に関係しない余分なコードをすべて削除しました。

私はこれを実行すると、私は私が見るものをクリック

left pressed 
left pressed 
left pressed 
left pressed 
left pressed 
left pressed 

数倍です。 これはtickメソッドの内部にあり、毎秒60回更新されるためです。私が唯一にのmousePressedとのmouseReleased方法に変更することができ、それ1

left pressed 

どうもありがとう

+0

をreleted空のメソッドを持っているMouseAdapterから継承することができる空のメソッドの実装を避けるために

。それはどこから呼ばれていますか? – hotzst

+1

と 'tick()'メソッドの目的は何ですか? –

+0

上記の@TimothyTruckleの言及、tickメソッドの目的、GUIとその現在の観察された、そして望ましい動作についての背景など、あなたの質問から重要な詳細を除外しました。私たちの知識の隙間を埋めることで私たちを助けてください。 –

答えて

2

私だけにのmousePressedとのmouseReleasedメソッドに何を変更することができますが、それ1

作る作ります

あなたは明らかにtick()メソッドからsysoutステートメントをmousePressed()

に移動することができます

あなたは、mousePressed()mouseReleased()にコードを書き換えてはいけません。必要に応じてどちらかを選択してください。あなたは、いくつかのマウスを使用するための実装は、マウスイベントハンドラメソッドと `tick`方法との間に相関がないあなたの例に基づいてリスナー

+0

あなたの助けをたくさんありがとう YouTubeでこのゲームのチュートリアルを実行することで、私の問題を解決することができました。 https://www.youtube.com/watch?v=K2RzIK3YEtI –

関連する問題