Jogo travando

Eu fiz este jogo mas quando eu executo, e movimento com o teclado a sprite fica travando na tela.
o que eu devo fazer.

segue o codigo da janela. DESCULPE TINHA MANDADO ERRADO


package rtype;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class RType extends JFrame {

    public RType() {
     add(new Board());

        setSize(800, 600);
        setTitle("Game");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setResizable(false);
        Toolkit toolkit = getToolkit();
        Dimension size = toolkit.getScreenSize();
        setLocation(size.width/2 - getWidth()/2,
		size.height/2 - getHeight()/2);

    }

    public static void main(String[] args) {


        RType cos = new RType();
        cos.setVisible(true);

    }
}
E[b]sta classe representa uma nave espacial e eventos teclado etc.[/b]


package rtype;

import java.awt.Image;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;

public class Craft {

    private String craft = "craft.png";

    private int dx;
    private int dy;
    private int x;
    private int y;
    private Image image;

    public Craft() {
        ImageIcon ii = new ImageIcon(this.getClass().getResource(craft));
        image = ii.getImage();
        x = 10;
        y = 10;
    }


    public void move() {
        x += dx;
        y += dy;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public Image getImage() {
        return image;
    }

    public void keyPressed(KeyEvent e) {

        int key = e.getKeyCode();

        if (key == KeyEvent.VK_RIGHT) {
            dx = -3;
        }

        if (key == KeyEvent.VK_LEFT) {
            dx = 3;
        }

        if (key == KeyEvent.VK_DOWN) {
            dy = -3;
        }

        if (key == KeyEvent.VK_UP) {
            dy = 3;
        }
    }

    public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_LEFT) {
            dx = 0;
        }

        if (key == KeyEvent.VK_RIGHT) {
            dx = 0;
        }

        if (key == KeyEvent.VK_UP) {
            dy = 0;
        }

        if (key == KeyEvent.VK_DOWN) {
            dy = 0;
        }
    }
}

esta e a classe board


package rtype;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JPanel;
import javax.swing.Timer;


public class Board extends JPanel implements ActionListener {

    private Timer timer;
    private Craft craft;

    public Board() {


        addKeyListener(new TAdapter());
        setFocusable(true);
        setBackground(Color.BLACK);
        setDoubleBuffered(true);

        craft = new Craft();

        timer = new Timer(5, this);
        timer.start();
    }


    public void paint(Graphics g) {
        super.paint(g);

        Graphics2D g2d = (Graphics2D)g;
        g2d.drawImage(craft.getImage(), craft.getX(), craft.getY(), this);

        Toolkit.getDefaultToolkit().sync();
        g.dispose();




    }



    public void actionPerformed(ActionEvent e) {
        craft.move();
        repaint();
    }


    private class TAdapter extends KeyAdapter {

        public void keyReleased(KeyEvent e) {
            craft.keyReleased(e);
        }

        public void keyPressed(KeyEvent e) {
            craft.keyPressed(e);
        }
    }

}

[code]
public class RType extends JFrame {

public RType() {
add(new Board());

setSize(800, 600);
setTitle(“Game”);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
Toolkit toolkit = getToolkit();
Dimension size = toolkit.getScreenSize();
setLocation(size.width/2 - getWidth()/2,
size.height/2 - getHeight()/2);

}

public static void main(String[] args) {

RType cos = new RType();
cos.setVisible(true);

}
} [/code]

Tem um monte de métodos faltando, poste-os pois não sou adivinha.

E favor postar também em tags code para ficar mais fácil responder.

Cade a classe Board? Onde voce faz a iteração de processamento grafico e lógico? Onde voce desenha na tela?

Mostre e poderemos te ajudar mais.

Você alguma vez já leu sobre como um jogo funciona? Ou está tentando fazer isso da sua cabeça, usando os eventos da AWT?

Se ainda não leu, sugiro fortemente que você entre no Ponto V e leia o material sobre Java 2D:
http://www.pontov.com.br

Seu código parece escrito em Java 1.1. A idéia é rodar na MSVM? Ou é uma aplicação para celular?

Este codigo e um tutorial que fiz na net.
http://zetcode.com/tutorials/javagamestutorial/
Mas eu vou seguir sua dica e ler o artigo sobre java 2d.
se voçe souber de algum tutorial mais recente eu agradeço.
valeu.
o JOGO NAO E PRA CELULAR NÃO.

tem alguma coisa que eu possa fazer pra aumentar a velocidade da aplicaçao, ou esta muito obsoleta mesmo?

  1. Use BufferedImages no lugar de ImageIcons: Ponto V! - Trabalhando com imagens;
  2. Faça um game loop corretamente: Ponto V! - O loop de animação;
  3. Use double buffering, page flipping e desenho direto: Ponto V! - Desenho direto - Active Rendering;;