Piszę prostą grę z pomocą książki Killer Game Programming in Java.
I gotowe na razie mam takie coś:
import java.awt.*;
import javax.swing.*;
public class animacja {
public static void main(String args[])
{
okno OKNO=new okno();
}
}
class okno extends JFrame
{
private static final int PWIDTH = 500; //statyczne stałe wymiary
private static final int PHEIGHT = 400;
public okno()
{
GamePanel panel=new GamePanel();
getContentPane().add(panel);
setTitle("Snake");
setSize( PWIDTH, PHEIGHT);
setDefaultCloseOperation(3);
setVisible(true);
}
}
class GamePanel extends JPanel implements Runnable
{
private static final int PWIDTH = 500; //statyczne stałe wymiary
private static final int PHEIGHT = 400;
private Thread animator; //wątek
private boolean running = false;
private boolean gameOver = false;
private Graphics dbg;
private Image dbImage = null;
public GamePanel() //konstruktor
{
setBackground(Color.white); //białe tło
setPreferredSize( new Dimension(PWIDTH, PHEIGHT));
}
public void notyfikacja()
{
super.addNotify();
startGame(); //start wątku
}
private void startGame()
// inicjalizacja i start wątku
{
if (animator == null || !running) {
animator = new Thread(this);
animator.start();
}
}
public void stopGame()
{
running = false;
}
public void run()
{
running = true;
while(running)
{
gameUpdate();
gameRender();
repaint();
try{
Thread.sleep(20);
}
catch(InterruptedException ex){}
System.exit(0);
}
}
private void gameUpdate()
{
if(!gameOver)
{
//tu aktualizacja stanu gry
}
}
private void gameRender() //rysowanie stanu gry do bufora
{
if(dbImage == null){//tworzenie bufora
dbImage= createImage(PWIDTH,PHEIGHT);
if(dbImage == null){
System.out.println("bufor jest pusty!");
return;
}
else
dbg=dbImage.getGraphics();
}
dbg.setColor(Color.white);
dbg.fillRect(0,0,PWIDTH,PHEIGHT);
//rysowanie gry
}
private void gameOverMessage(Graphics g){
g.drawString("Game Over", PWIDTH/2, PHEIGHT/2);
}
public void paintComponent(Graphics g)
{
super.paintComponents(g);
if(dbImage != null){
g.drawImage(dbImage,0,0,null);
}
}
}
I mam problem w metodzie gamerender.
if(dbImage == null){//tworzenie bufora
dbImage= createImage(PWIDTH,PHEIGHT);
if(dbImage == null){
System.out.println("bufor jest pusty!");
return;
}
Nie tworzy tego obiektu. Wyświetla błąd "bufor jest pusty!".
Podejrzewam że przyczyną jest to że książka jest dość i stara i być może coś się w Java zmieniło w kwestii deklarowania i inicjalizacji Image.