2011-09-13 37 views
-4

嗨,我正在一個遊戲工作。但由於某些原因,圖像不會出現也不會移動。java圖像不移動

這是一些代碼。

TheScreen.java

package TheCarePackage; 

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

public class TheScreen extends JFrame implements KeyListener{ 

short FWIDTH = 500; 
short FHEIGHT = 500; 

private Image dbImage; 
private Graphics dbGraphics; 

private Image Bg; 

static Player_1 P1 = new Player_1(250,450); 
static AlienSpawner AS = new AlienSpawner(); 

public TheScreen(){ 

    addKeyListener(this); 
    setTitle("1st Game"); 
    setSize(FWIDTH,FHEIGHT); 
    setResizable(false); 
    setLocationRelativeTo(null); 
    setBackground(Color.white); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 

    ImageIcon back = new  ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Background.png"); 
    Bg = back.getImage(); 

} 

public void paint(Graphics g){ 

    dbImage = createImage(getWidth(),getHeight()); 
    dbGraphics = dbImage.getGraphics(); 
    paintComponent(dbGraphics); 
    g.drawImage(dbImage,0,0,this); 

} 

public void paintComponent(Graphics g){ 

    g.drawImage(Bg,0,0,this); 
    P1.draw(g); 
    AS.paint(g); 

    repaint(); 

} 

public static void main(String[] args) { 

    new TheScreen(); 

    Thread As = new Thread(AS); 
    Thread Player1 = new Thread(P1); 
    As.start(); 
    Player1.start(); 

} 

public void keyPressed(KeyEvent e) { 

    P1.keyPressed(e); 

} 

public void keyReleased(KeyEvent e) {} 
public void keyTyped(KeyEvent e) {} 



} 

ThePlayer.java

package TheCarePackage; 

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

public class Player_1 implements Runnable{ 

public int a = 8; 

int x,y; 
Image Player_1; 

private Shot[] shots; 
static AlienSpawner AS = new AlienSpawner(); 

public Player_1(int x, int y){ 

    this.x = x; 
    this.y = y; 

    ImageIcon i = new ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Player_1.png"); 
    Player_1 = i.getImage(); 

    shots = new Shot[8]; 

} 

public void draw(Graphics g){ 

    g.drawImage(Player_1,x,y,50,50,null); 

    g.setColor(Color.white); 
    g.drawString("Ammo : " + a,10,40); 

    for(int i = 0; i < shots.length; i++){ 

     if(shots[i] != null){ 

      shots[i].drawShot(g); 

     } 

    } 

} 

public void keyPressed(KeyEvent e) { 

    if(e.getKeyCode() == e.VK_LEFT){ 

     x += -8; 

    } 
    if(e.getKeyCode() == e.VK_RIGHT){ 

     x += 8; 

    } 
    if(e.getKeyCode() == e.VK_SPACE){ 

    for(int i = 0; i < shots.length; i++){ 

     if(shots[i] == null){ 

      a--; 
      shots[i] = generateShot(); 
      break; 

     } 

    } 

    } 

} 

public void keyReleased(KeyEvent e) {} 

public void keyTyped(KeyEvent e) {} 

public Shot generateShot(){ 

    Shot shot = new Shot(x+23,y-7); 

    return shot; 

} 

@Override 
public void run(){ 
    try{ 
     while(true){ 

      Thread.sleep(5); 

      for(int i = 0; i < shots.length; i++){ 

       if(shots[i] != null){ 

        shots[i].moveShot(-1); 

        if(shots[i].getY() < 0){ 

         shots[i] = null; 
         a++; 

        } 


       } 

      } 

     } 
    }catch(Exception e){System.err.println(e.getMessage());} 
} 

} 

theProblem ...

TheAlienSpawner.java

package TheCarePackage; 

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

public class AlienSpawner implements Runnable{ 

private int Health = 3; 

private Shot s; 

private boolean Spawn = true; 

public AlienSpawner(){} 

Alien1stVariant A1 = new Alien1stVariant(250,0); 

public void paint(Graphics g){ 

    A1.drawAlien(g); 

} 

public void run() { 

    try{ 

     Thread.sleep(20); 

    while(true){ 

    A1.movement(1); 

    } 

    }catch(Exception e){System.err.println(e.getMessage());} 
} 

} 

的階級異己的另一個問題..

package TheCarePackage; 

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

public class Alien1stVariant { 

private int x; 
private int y; 

private Image Alien; 

public Alien1stVariant(int x, int y){ 

    this.x = x; 
    this.y = y; 

    ImageIcon AlienIcon = new ImageIcon("C:/Users/yellowsoldier25/Desktop/Games/PlanB_1stGame/src/TheCarePackage/Images/Alien.png"); 
    Alien = AlienIcon.getImage(); 

} 

public int getX(){ 

    return x; 

} 

public int getY(){ 

    return y; 

} 

public void movement(int speed){ 

    y += speed; 

} 

public void drawAlien(Graphics g){ 

    g.drawImage(Alien,x,y,40,40,null); 

} 

} 

請儘快幫忙。

問題:異形圖像不會移動並出現。

+0

你在調試時學到了什麼? –

+0

圖像不會移動,它不會拍攝,但如果我刪除運行方法,那麼它會顯示,但仍然不會移動。 – user974327

+0

這是一個關於放大和動畫圖像的問題。那是一個「本地問題」?很多人都有這些問題。克服自己,並試圖爲論壇做出積極的貢獻,而不是攻擊那些首先在網站上發佈的人。 – camickr

回答

0

它看起來像你的run方法裏面你TheAlienSpawner.java文件中有一個無限循環:

public void run() { 
    try{ 
     Thread.sleep(20); 
    while(true){ //This will never end 
    A1.movement(1); 
    } 
    }catch(Exception e){System.err.println(e.getMessage());} 
} 

您之前的一段時間(真)睡眠胎面一次20毫秒,導致一個無限循環,你要找的是什麼類似於這樣:

public void run() { 
    try{ 
     while(true){ 
      Thread.sleep(20); 
      A1.movement(1); 
     } 
    }catch(Exception e){System.err.println(e.getMessage());} 
} 
1

的JFrame不具有的paintComponent()方法,所以不要嘗試將其覆蓋。

你應該很少重寫paint()方法。相反,自定義繪畫是通過擴展JPanel(或JComponent)完成的,然後將面板添加到框架的內容窗格。

如果你想做動畫,使用一個Swing Timer現在有一個帶有sleep()的while循環。