2011-09-13 16 views
-4

こんにちは、私はゲームに取り組んでいます。しかし、何らかの理由でImageが表示されたり移動したりすることはありません。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ミリ秒に一回のトレッドを寝JFrameのは、paintComponent()メソッドを持っていない

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

ので、それを上書きしようとしない:、何を探していることは、これに似たものです。

paint()メソッドをオーバーライドすることはほとんどありません。代わりにJPanel(またはJComponent)を拡張してカスタムペインティングを行い、パネルをフレームのコンテンツペインに追加します。

アニメーションをしたい場合は、今度はsleep()を使ってwhileループをスイングタイマーで使用します。

関連する問題