2016-08-14 91 views
-2

我正在用java創建一個遊戲,只是爲了我自己的享受,當我按下運動鍵時,我選擇了矩形在屏幕上不動。這是我的第一類我的KeyPressed不在Java中工作

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); 

    } 

} 

我的第二類

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; 
     } 


    } 

} 

我會在以後添加更多的類,但是這是我現在所擁有的。有人可以幫幫我嗎。

回答

0

這跟KeyListener沒什麼關係,不管xy是什麼,你都畫了矩形。如果用變量xy替換矩形的x和y值,它可以正常工作。

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 
}