2016-08-14 11 views
-2

私は自分の楽しみのためにJavaでゲームを作成しています。移動キーを押すと、画面上の四角形が動いていません。ここで私は、後に複数のクラスを追加するつもりですが、これは私が今持っているものである私のKeyPressedがJavaで動作していない

package Game; 

import java.awt.*; 
import java.awt.event.*; 


import javax.swing.*; 

public class Player extends JPanel implements ActionListener, KeyListener { 

    Timer t = new Timer(5,this); 
    double x = 0, y = 0, velx = 0, vely = 0; 

    public Player(){ 
     t.start(); 
     addKeyListener(this); 
     setFocusable(true); 
     setFocusTraversalKeysEnabled(false); 
    } 

    public void paintComponent (Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.setColor(Color.RED); 
     g2.fillRect(40, 40, 20, 30); 
    } 
    @Override 
    public void keyReleased(KeyEvent e) { 
     velx = 0; 
     vely = 0; 

    } 
    @Override 
    public void keyTyped(KeyEvent e) { 

    } 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     x += velx; 
     y += vely; 
     repaint(); 

    } 



    @Override 
    public void keyPressed(KeyEvent e) { 

     if(e.getKeyCode() == KeyEvent.VK_D){ 
      velx = 1.5; 
      vely = 0; 
     } 
     else if(e.getKeyCode() == KeyEvent.VK_A){ 
      velx = -1.5; 
      vely = 0; 
     } 
     else if(e.getKeyCode() == KeyEvent.VK_W){ 
      vely = -1.5; 
      velx = 0; 
     } 


    } 

} 

私の最初のクラス

package Game; 
import java.awt.*; 
import javax.swing.*; 
import Game.Player; 

public class Frame { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     Player pl = new Player(); 

     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setResizable(false); 
     f.setSize(600, 600); 
     f.setTitle("Filler"); 
     f.add(pl); 

     f.setVisible(true); 

    } 

} 

そして、私の第二のクラスです。誰かが私を助けてくれますか?

答えて

0

これはKeyListenerとは関係がありません。xyに関係なく、長方形をペイントすることは事実です。長方形のxとyの値を変数xyに置き換えると、正常に動作します。

public void paintComponent (Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2 = (Graphics2D) g; 
    g2.setColor(Color.RED); 
    g2.fillRect((int)x, (int)y, 20, 30); // change line here 
} 
関連する問題