I’m trying to create an enemy every 10 seconds and make it appear on the screen with different moves.
The problem is that the enemy does not appear on the screen.
I tried to create an array list and add and then draw. But I do not know if I’m doing it right.
Here is the class which controls the game:
package projeto1;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import javax.swing.JPanel;
public class PainelJogo extends JPanel implements Runnable {
public static int TELA_LARGURA = 640;
public static int TELA_ALTURA = 480;
private Jogador jogador;
private ArrayList<Inimigo> inimigo = new ArrayList();
long tempoAnterior = System.currentTimeMillis();
float timer;
int cont = 0;
private BufferedImage buffer;
private Graphics grafico;
private double difTempo = 0;
public PainelJogo() {
setPreferredSize(new Dimension(TELA_LARGURA, TELA_ALTURA));
setFocusable(true);
requestFocus();
buffer = new BufferedImage(TELA_LARGURA, TELA_ALTURA,
BufferedImage.TYPE_4BYTE_ABGR);
grafico = buffer.getGraphics();
jogador = new Jogador();// Create player
//Set initial position to player
jogador.setX(100);
jogador.setY(200);
addKeyListener(new KeyListener() {
public void keyTyped(KeyEvent e) {}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT)
jogador.setLeft(true);
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
jogador.setRight(true);
if (e.getKeyCode() == KeyEvent.VK_UP)
jogador.setUp(true);
if (e.getKeyCode() == KeyEvent.VK_DOWN)
jogador.setDown(true);
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_LEFT)
jogador.setLeft(false);
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
jogador.setRight(false);
if (e.getKeyCode() == KeyEvent.VK_UP)
jogador.setUp(false);
if (e.getKeyCode() == KeyEvent.VK_DOWN)
jogador.setDown(false);
}
});
Thread t = new Thread(this);
t.start();
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(buffer, 0, 0, null);
}
public void run() {
while(true) {
difTempo = ((double) (System.currentTimeMillis() - tempoAnterior)) / 1000f;
tempoAnterior = System.currentTimeMillis();
timer += difTempo;
if(timer > 10000)
{
inimigo.add(new Inimigo());
inimigo.get(cont).desenha(grafico);
inimigo.get(cont).atualiza(difTempo);
}
grafico.setColor(Color.WHITE);
grafico.fillRect(0, 0, TELA_LARGURA, TELA_ALTURA);
jogador.atualiza(0);
jogador.desenha(grafico);
cont++;
this.paintImmediately(0, 0, TELA_LARGURA, TELA_ALTURA);
}
}
}