2016-12-24 11 views
0

同時に2つのオブジェクトを移動したいです。 私はこのためにスレッドを使いたいです。しかし、runメソッドでエラーが発生します。 どうすればいいですか? キーボードイベントを使用してこれを行う方法 2人プレイのゲームと同じですか?私はこの2プレイヤーゲームのようにキーボードイベントを使用して行うことができますどのようにスレッドでのKeyListenerの使用

public class First extends JPanel implements Runnable,KeyListener{ 
    int y1=303/2; 
    private int vy=0; 

    public void paintComponent(Graphics g){ 
     g.setColor(Color.BLUE); 
     g.fillRect(10,y1, 15, 20); 
    } 

    public void setVelocity(int v){ 
     vy=v; 

    } 

    @Override 
    public void run() { 
     int keyCode=e.getKeyCode(); 
     if(keyCode==KeyEvent.VK_UP){ 

     } 
     if(keyCode==KeyEvent.VK_S){ 

     } 

     else if(keyCode==KeyEvent.VK_DOWN){ 

     } 
     else if(keyCode==KeyEvent.VK_W){ 

     } 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException ex) { 
      ex.printStackTrace(); 
     } 
    } 
    public static void main(String[] args){ 
     JFrame jf=new JFrame(); 
     Panel p=new Panel(); 
     jf.add(p); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     jf.setSize(300,300); 
     jf.setVisible(true); 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 

    } 

    @Override 
    public void keyPressed(KeyEvent e) { 

    } 

    @Override 
    public void keyReleased(KeyEvent e) { 

    } 
} 

class Second extends JPanel{ 
    int y2=303/2; 
    private int vy=0; 

    public void setVelocity(int v){ 
     vy=v; 

    } 

    @Override 
    public void paintComponent(Graphics g){ 
     g.setColor(Color.YELLOW); 
     g.fillRect(150,y2, 15, 20); 
    } 

} 

class Panel extends JPanel{ 
    First f=new First(); 
    Second s=new Second(); 
    public void paintComponent(Graphics g){ 
     s.paintComponent(g); 
     f.paintComponent(g); 
    } 
} 
+1

どのようなエラーがありますか? stacktraceを投稿する – GurV

+0

runメソッドの 'e'もエラーをスローする – Rslnn

+0

スレッドを使用して2つのオブジェクトを移動するにはどうすればよいですか? – Rslnn

答えて

1

:ここ

コードですか?

イベントは最後に押されたキーに対してのみ生成されるため、基本的には押されたキー(およびそれらがリリースされたとき)をすべて追跡する必要があります。

私はこれまで、Key BindingsSwing Timerを使用してこれを行いました。

このアプローチの実例については、Motion Using the KeyboardにあるKeyboardAnimationの例を参照してください。

リンクでは、Key Bindingsが何であるか、なぜそれらがKeyListenerよりも優先されるべきかを説明します。