2013-12-10 101 views
2

我試圖創建一個簡單的遊戲的開始。我正在嘗試做的第一件事是將圖形導入我的代碼並將其移動到屏幕上。我能夠在屏幕上畫出一個球並移動它,但是當我從文件導入圖形時,我無法移動它。我錯過了什麼或做錯了什麼?如何通過箭頭鍵在屏幕上移動圖形?

import javax.swing.*; 
import java.awt.Graphics; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.ImageIcon; 
import java.awt.Color; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyListener; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class Game extends JPanel implements ActionListener, KeyListener { 

    Timer t = new Timer(5, this); 
    double x = 0, y = 0, velX = 0, velY = 0; 
    private ImageIcon image; 


    public Game(){ 
     setBackground(Color.WHITE); 
     t.start(); 
     addKeyListener(this); 
     this.setFocusable(true); 
     setFocusTraversalKeysEnabled(false); 
     image = new ImageIcon ("ship.gif"); 

    } 

    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     ImageIcon i = new ImageIcon("C:\\Users\\Bryan\\Pictures\\ship.gif"); 
     i.paintIcon(this, g, 0, 0); 

    } 

    public void actionPerformed(ActionEvent e){ 
     repaint(); 
     x += velX; 
     y += velY; 

     if(x<0){ 
      velX = 0; 
      x = 0; 
     } 

     if(x>750){ 
      velX = 0; 
      x = 750; 
     } 

     if(y<0);{ 
      velY = 0; 
      y = 0; 
     } 

     if(y>550){ 
      velY = 0; 
      y = 550; 
     } 
    } 

    public void up(){ 
     velY = -1.5; 
     velX = 0; 
    } 

    public void down(){ 
     velY = 1.5; 
     velX = 0; 
    } 

    public void left(){ 
     velX = -1.5; 
     velY = 0; 
    } 

    public void right(){ 
     velX = 1.5; 
     velY = 0; 
    } 

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

     if (code == KeyEvent.VK_UP){ 
      up(); 
     } 

     if (code == KeyEvent.VK_DOWN){ 
      down(); 
     } 

     if (code == KeyEvent.VK_LEFT){ 
      left(); 
     } 

     if (code == KeyEvent.VK_RIGHT){ 
      right(); 
     } 
    } 

    public void keyTyped(KeyEvent e){} 

    public void keyReleased(KeyEvent e){ 

//  velX = 0; 
//  velY = 0; 
     int code = e.getKeyCode(); 

     if (code == KeyEvent.VK_UP){ 
      velY = 0; 
     } 
     if (code == KeyEvent.VK_DOWN){ 
      velY = 0; 
     } 
     if (code == KeyEvent.VK_LEFT){ 
      velX = 0; 
     } 
     if (code == KeyEvent.VK_RIGHT){ 
      velX = 0; 
     } 
    } 

} 

我的司機是另一個類,如下所示:

import java.awt.Color; 

import javax.swing.JFrame; 

public class GameDriver { 

    public static void main(String[] args) { 

     JFrame f = new JFrame(); 
     Game g = new Game(); 
     f.add(g); 
     f.setVisible(true); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setSize(800,600); 

    } 
} 

回答

2

兩個大問題在這裏:

public void paintComponent(Graphics g){ 
    super.paintComponent(g); 
    ImageIcon i = new ImageIcon("C:\\Users\\Bryan\\Pictures\\ship.gif"); 
    i.paintIcon(this, g, 0, 0); 
} 
  1. 你從文件中讀取從paintComponent(...)內。 從來沒有這樣做,因爲這會不必要地拖慢你的繪圖。讀取圖像一次,也許在構造函數中,然後在繪圖中使用存儲的圖像變量。 paintComponent方法應該用於繪製只有,它應該是瘦,平均和快速
  2. 您正在繪製0,0 總是。如果您想要移動某些東西,請在可變位置繪製,然後更改變量所保留的值並重繪。

另外:您應該使用鍵綁定接受Swing應用程序中的按鍵,因爲這有助於解決焦點問題。

例如,請查看我的代碼this answer

+1

(咳嗽)鍵綁定(咳嗽);)+1 – MadProgrammer

+0

@MadProgrammer:你應該咳嗽了一下(謝謝)。 –

+0

好的,謝謝。那麼再給你一個問題。而不是使用paintComponent方法,我應該使用什麼以及如何導入圖像?對不起,我是一個新手(: – Bfrank

相關問題