2017-01-30 93 views
-2

我的程序有3個java文件,分別是Frame,Dude(包含字符)和Board(實現actionListener)。我的程序沒有拋出任何錯誤,圖像(背景和字符)渲染效果很好。但角色並沒有前進。爲什麼我的2D遊戲中的角色不移動?


import javax.swing.*; 

public class Frame { 
    public static void main(String[] args){ 
     JFrame frame= new JFrame("2D Game"); 
     frame.add(new Board()); 
     frame.setVisible(true); 
     frame.setSize(1200, 600); 
    } 
} 

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

import javax.swing.*; 

public class Dude { 
    int x, dx, y; 
    Image still; 

    public Dude(){ 
     ImageIcon i = new ImageIcon("/home/amitabh/Pictures/man1.jpg"); 
     still= i.getImage(); 
     x=10; 
     y=172; 
     } 

    public void move(){ 
     x=x+dx; 
    } 

    public int getX(){ 
     return x; 
    } 

    public int getY(){ 
     return y; 
    } 

    public Image getImage(){ 
     return still; 
    } 

    public void keyPressed(KeyEvent e){ 
     int key= e.getKeyCode(); 

     if(key== KeyEvent.VK_LEFT); 
     dx= -1; 

     if(key== KeyEvent.VK_RIGHT); 
     dx= 1; 
    } 

    public void keyReleased(KeyEvent e){ 
     int key= e.getKeyCode(); 

     if(key==KeyEvent.VK_LEFT); 
     dx=0; 

     if(key==KeyEvent.VK_RIGHT); 
     dx=0; 
    } 
} 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Board extends JPanel implements ActionListener{ 
    Image img; 
    Timer time; 
    Dude p; 

    public Board(){ 
     p= new Dude(); 
     addKeyListener(new AL()); 
     setFocusable(true); 
     ImageIcon i= new ImageIcon("/home/amitabh/Pictures/game1.png"); 
     img= i.getImage(); 
     time= new Timer(5,this); 
     time.start(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     p.move(); 
     repaint(); 

    } 

    public void paint(Graphics g){ 
     super.paint(g); 
     Graphics2D g2d= (Graphics2D)g; 

     g2d.drawImage(img, 0,0, null); 
     g2d.drawImage(p.getImage(), p.getX(), p.getY(), null); 
    } 

    public class AL extends KeyAdapter{ 
     public void keyReleased(KeyEvent e){ 
      p.keyReleased(e); 
     } 
     public void KeyPressed(KeyEvent e){ 
      p.keyPressed(e); 
     } 
    } 
} 
+0

你確定'KeyListener'被調用嗎? – MadProgrammer

+0

多數民衆贊成確切程序...如果我錯過了...請幫助@ MadProgrammer – Amitabh

+0

耶是keylistener是在委員會類的構造函數@ MadProgrammer – Amitabh

回答

2

開始通過談話在非常仔細地看:

if (key == KeyEvent.VK_LEFT); 

確實看起來可笑嗎?

if (key == KeyEvent.VK_LEFT); // <--- What's the ; doing here? 

改變它更像...

if (key == KeyEvent.VK_LEFT) { 
    dx = 0; 
} 

而且,是的,這就是爲什麼我們鼓勵你使用{ ... }

接下來,需要仔細看看.. 。

public void KeyPressed(KeyEvent e) { 

看到有什麼不對嗎?爲什麼它以大寫K開始,這不是正確的方法簽名

切換到更多的東西一樣......

@Override 
public void keyReleased(KeyEvent e) { 
    p.keyReleased(e); 
} 

@Override 
public void keyPressed(KeyEvent e) { 
    p.keyPressed(e); 
} 

是的,這就是爲什麼我們鼓勵你使用@Override;)

最後更改paint方法paintComponent

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 

鼓勵你覆蓋paintComponent執行自噴漆時,往往會造成更少的問題

我還encorage你看看在Key Bindings API和青睞過來KeyListener,因爲它提供了觸發關鍵事件所需的對焦水平的更好的控制

我也鼓勵您覆蓋的getPreferredSize,並從那裏返回您的首選尺寸,而不是設置框架的尺寸。幀大小包括幀的裝飾,所以你的內容小於幀大小

+0

你是上帝@ MadProgrammer – Amitabh

+1

不,我只是沒有生命;) – MadProgrammer

+0

thnx男人.... thnku這麼多爲您的投入..它的工作...我會遵循什麼你說 – Amitabh

相關問題