Animación en NetBeans
Clase
package AnimacionBolita;
import java.awt.*;
import javax.swing.*;
AnimacionBolita(){
super("Rebota Bolita");
setSize(400,400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rect = getBounds();
// Para obtener las medidas del JFrame
pantalla p = new pantalla((int)rect.width,(int)rect.height);
getContentPane().add(p);
pack();
setVisible(true);
p.start();
}
/* Metodo inicial MAIN */
public static void main(String args[]){
new Bolita();
}
/* Deaclaracion de las Variables locales de esta clase */
private Rectangle rect;
}
class pantalla extends Canvas implements Runnable{
/* Constructor de pantalla */
pantalla(int x, int y){
setSize(x,y);
setBackground(Color.black);
rect = getBounds();
}
public void paint(Graphics g){
g.setColor(Color.red);
g.fillOval(x,y,20,20);
}
public void run(){
try{
while(running){
if (dir == 1){
x--;
y--;
if (x == 0)
dir = 2;
if (y == 0)
dir = 4;
}
if (dir == 2){
x++;
y--;
if (x == (rect.width - 12))
dir = 1;
if (y == 0)
dir = 3;
}
if (dir == 3){
x++;
y++;
if (x == (rect.width - 12))
dir = 4;
if (y == (rect.height - 12))
dir = 2;
}
if (dir == 4){
x--;
y++;
if (x == 0)
dir = 3;
if (y == (rect.height - 12))
dir = 1;
}
System.out.println(" -> " + x + " " + y + " " + dir);
repaint();
t.sleep(5);
}
}catch(InterruptedException e){
running = false;
}
}
public void start(){
if (t == null){
x = getPointsX();
y = getPointsY();
/*
* Con el metodo "dir()" obtengo la direccion inicial de la pelota
*/
dir = dir();
running = true;
t = new Thread(this);
t.start();
}
}
public void update(Graphics g){
/*
* esto me limpia la pantalla para
* así poder dibujar en el camios del objeto
* en su nueva posición.
* Si esto no se hace... el objeto dibujado
* con anterioridad aparecerá y sera sobre-dibujado
*/
rect = getBounds();
Image image = createImage(rect.width,rect.height);
Graphics gi = image.getGraphics();
gi.clearRect(0,0,rect.width,rect.height);
paint(gi);
g.drawImage(image,0,0,null);
}
/* Metodo que da la coordenada X inicial */
private int getPointsX(){
int num;
do{
num = (int)Math.round(Math.random() * 10000);
}while(num>=rect.width-12);
return num;
}
/* Metodo que da la coordenada Y inicial */
private int getPointsY(){
int num;
do{
num = (int)Math.round(Math.random() * 10000);
}while(num>=rect.height-12);
return num;
}
/* Metodo que da la direccion inicial de la bolita */
private int dir(){
int num;
do{
num = (int)Math.round(Math.random()*10);
}while((num>4) || (num == 0));
return num;
}
/* Deaclaracion de las Variables locales de esta clase */
private Rectangle rect;
private int x;
private int y;
private int dir;
private Thread t;
private boolean running;
}
No hay comentarios:
Publicar un comentario