2016-05-22 12 views
0

Ich erstelle ein Breakout-Spiel und ich versuche, die Brick-Klasse zu erstellen, die ein Bild von einem Ziegelstein Schicht für Schicht anzeigt. Aber mein Code kompiliert, aber nichts zeigt sich.Wie Bilder Schicht für Schicht in Java anzeigen

Das ist was ich bisher habe.

Hauptklasse:

public class Breakout extends Applet implements Runnable{ 
Thread thread = new Thread(this); 
boolean running = true; 
Brick b; 
Image dbImage; 
Graphics dbg; 
public void init(){ 
    setSize(800,600); 
    b = new Brick(); 
} 
public void start(){ 
    thread.start(); 
} 
public void destroy(){ 
    running = false; 
} 
public void stop(){ 
    running = false; 
} 
public void run(){ 
    while(running){ 
     b.update(this); 
     repaint(); 
     try{ 
      thread.sleep(20); 
     } 
     catch (InterruptedException e){ 
      System.out.println("AN ERROR HAS OCCURED"); 
     } 
    } 
} 
public void update(Graphics g){ 
    dbImage = createImage(getWidth(),getHeight()); 
    dbg = dbImage.getGraphics(); 
    paint(dbg); 
    g.drawImage(dbImage,0,0,this); 
} 
public void paint(Graphics g){ 
    b.paint(g,this); 
} 

} 

Dies ist die Ziegel-Klasse:

public class Brick { 
private URL url; 
private Image brick; 
Image [][] bricks = new Image[50][3]; 
public void brick (Breakout bR){ 
    url = bR.getDocumentBase(); 
    brick = bR.getImage(url,"brick.png"); 
    for(int i =0; i < bricks.length; i++) 
    for(int j = 0; j < bricks[0].length; j++) 
     bricks[i][j] = brick; 

} 

public void update(Breakout bR){ 

} 

public void paint(Graphics g, Breakout bR){ 

    int imageWidth = bricks[0][0].getWidth(bR); 
    int imageHeight = bricks[0][0].getHeight(bR); 
    for (int i = 0; i < bricks.length; i++) 
     for (int j =0; j < bricks[0].length; j++) 

      g.drawImage(bricks[i][j], i * imageWidth + 5, j * imageHeight + 5, bR); 

} 
} 

Vielen Dank für Ihre Hilfe.

Antwort

-1

Sie haben keine Hauptmethode in Breakout.java. Mindestens eine Klasse in einem Projekt benötigt eine Hauptmethode, um sie auszuführen. Sie müssen außerdem Thread.start() aufrufen, damit Ihre Ausführungsmethode für den Thread ausgeführt wird. Betrachten Sie this als ein Beispiel.

+1

Applets eine main-Methode nicht brauchen – Joni

0

Es sieht so aus, als wäre Ihr Grafikbereich kleiner als Sie denken.

Hier können einige grundlegende Debug-Code hinzufügen, um das Problem zu lokalisieren:

public void update(Graphics g){ 
    dbImage = createImage(getWidth(),getHeight()); 
    //New line: 
    System.out.println("dbImage widthxheight = "+dbImage.getWidth()+"x"+dbImage.getHeight()); 
    dbg = dbImage.getGraphics(); 
    paint(dbg); 
    g.drawImage(dbImage,0,0,this); 
} 

Und:

public void paint(Graphics g, Breakout bR){ 

    //New line: 
    Rectangle bounds = ((Graphics2D)g).getDeviceConfiguration().getBounds(); 
    //New line: 
    System.out.println("bounds widthxheight = "+bounds.getWidth()+"x"+bounds.getHeight()); 
    int imageWidth = bricks[0][0].getWidth(bR); 
    int imageHeight = bricks[0][0].getHeight(bR); 
    //New line: 
    System.out.println("imageSize widthxheight = "+imageWidth +"x"+imageHeight); 
    for (int i = 0; i < bricks.length; i++) 
     for (int j =0; j < bricks[0].length; j++) 

      g.drawImage(bricks[i][j], i * imageWidth + 5, j * imageHeight + 5, bR); 
} 

Nun, wie groß ist Ihre Grafikbereich entsprechend der Konsole?

Bearbeiten: Wenn Sie überhaupt keine Nachrichten sehen, wird Ihr Code nicht aufgerufen und Sie müssen möglicherweise überprüfen, wie Sie Ihr Applet starten.

1

Das Problem ist hier:

b = new Brick(); 

Sie ein Objekt erstellen fordern aber, dass Konstruktor muß nicht so ist es existieren davon ausgehen, eine der grundlegenden Standard sein.

während Sie

public void brick (Breakout bR){ 

haben, ist dies eine Methode. kein Konstruktor

Änderung

public Brick (Breakout bR){ 

und

b=new Brick(this); 
Verwandte Themen