package main;
import [Link];
import [Link].*;
import [Link].*;
import [Link].*;
public class Animacion extends JComponent{
private final static int ANCHO = 768;
private final static int ALTO = 384;
private final static int DIAMETRO = 40;
private float x, y;
private float vx, vy;
private boolean arriba, abajo, izquierda, derecha;
public Animacion() {
setPreferredSize(new Dimension(ANCHO, ALTO));
x = 10;
y = 20;
addKeyListener(new KeyAdapter() {
//Tecla pulsada, el Pacman se mueve
public void keyPressed(KeyEvent e) {
actualizar([Link](), true);
}
//El Pacman no se mueve
public void keyReleased(KeyEvent e) {
actualizar([Link](), false);
}
private void actualizar(int keyCode, boolean pressed) {
//Define el movimiento del Pacman en función de la tecla pulsada
switch (keyCode) {
case KeyEvent.VK_UP:
arriba = pressed;
break;
case KeyEvent.VK_DOWN:
abajo = pressed;
break;
case KeyEvent.VK_LEFT:
izquierda = pressed;
break;
case KeyEvent.VK_RIGHT:
derecha = pressed;
break;
}
}
});
setFocusable(true);
}
private float limite(float valor, float min, float max) {
if (valor > max)
return max;
if (valor < min)
return min;
return valor;
}
private void movimiento(float dt) {
vx = 0;
vy = 0;
if (arriba)
vy = -300;
if (abajo)
vy = 300;
if (izquierda)
vx = -300;
if (derecha)
vx = 300;
x = limite(x + vx * dt, 0, ANCHO - DIAMETRO);
y = limite(y + vy * dt, 0, ALTO - DIAMETRO);
}
public void paint(Graphics g) {
[Link]([Link]);
[Link](0, 0, ANCHO, ALTO);
[Link]([Link]);
[Link]([Link](x), [Link](y), DIAMETRO, DIAMETRO);
}
private void dibuja() throws Exception {
[Link](new Runnable() {
public void run() {
paintImmediately(0, 0, ANCHO, ALTO);
}
});
}
public void cicloPrincipalJuego() throws Exception {
long tiempoViejo = [Link]();
while (true) {
long tiempoNuevo = [Link]();
float dt = (tiempoNuevo - tiempoViejo) / 1000000000f;
tiempoViejo = tiempoNuevo;
movimiento(dt);
dibuja();
}
}