Main.java
package packagenamehere;
import javax.swing.JFrame;
/**
*
* @author fede
*/
public class Main extends JFrame {
public Main(){
add(new Board());
setTitle("Skeleton");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300,300);
setLocationRelativeTo(null);
setVisible(true);
setResizable(false);
}
public static void main(String[] args) {
new Main();
}
}
Board.java
package packagenamehere;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Color;
// timer
import javax.swing.Timer;
import java.awt.Toolkit;
// teclas y timer
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
// teclas
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
*
* @author fede
*/
public class Board extends JPanel implements ActionListener {
private Timer timer;
public Board(){
setDoubleBuffered(true);
setFocusable(true);
addKeyListener(new Listener());
setBackground(Color.white);
timer = new Timer(5, this);
timer.start();
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
// Dibuja aca
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void actionPerformed(ActionEvent e){
// Logica aca
repaint();
}
private class Listener extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e){
// Metodo de los objetos que reciben input
}
@Override
public void keyReleased(KeyEvent e){
// Metodo de los objetos que reciben input
}
}
}
Si leyeron el post de Animacion, veran que digo que hay mas timers, este utiliza threads, y es una forma mas efectiva aunque un poco mas complicada de hacerlo.
Board.java
package packagenamehere;
import javax.swing.JPanel;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Color;
// timer
import java.awt.Toolkit;
// teclas
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
*
* @author fede
*/
public class Board extends JPanel implements Runnable {
private Thread thread;
private final int DELAY = 50;
private GameState gameState;
private MenuScreen menuScreen;
public Board(){
setDoubleBuffered(true);
setFocusable(true);
addKeyListener(new Listener());
setBackground(Color.white);
}
@Override
public void addNotify(){
super.addNotify();
thread = new Thread(this);
thread.start();
}
@Override
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
// Dibuja aca
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void cycle(){
// Logica aca
}
@Override
public void run(){
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while(true){
cycle();
repaint();
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if (sleep < 0)
sleep = 2;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
}
}
private class Listener extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e){
// Metodo de los objetos que reciben input
}
@Override
public void keyReleased(KeyEvent e){
// Metodo de los objetos que reciben input
}
}
}
Gracias Amigo!! me sirvio de mucho este tutorial, lo segui desde el comienzo y es lo mejor que encontre. Sigue asi ;)
ResponderEliminar