Jeu de vélo Tron Java (Personnage mobile via JPanels)


Je conçois un jeu de vélo Tron en utilisant Java, avec deux personnages qui laissent une trace derrière eux car ils sont constamment en mouvement.

Arena se compose d'un Tableau 2d de JPanels dans un Composite dans une JFrame. Je l'ai trouvé plus facile avec cette structure.

Je ne peux pas comprendre comment déplacer un personnage à travers plusieurs JPanels et les faire tourner avec un KeyListener. De l'aide ou des idées seront appréciées.

Voici le code de ma classe Arena:

import javax.swing.*;
import java.awt.*;

public class Arena extends JPanel
{

public Arena()
{

    setLayout(new GridLayout(15,15,0,0));
    setPreferredSize(new Dimension(500,500));
    JPanel panel;
    JPanel[][] grids = new JPanel[15][15];

    for(int r = 0;r<grids.length;r++)
    {
        for(int c = 0;c<grids[0].length;c++)
        {
            panel = new JPanel();
            panel.setPreferredSize(new Dimension(25,25));
            panel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
            add(panel);
        }
    }
}
public static void play()
{
    JFrame fr = new JFrame();
    fr.setTitle("Arena");
    fr.setSize(520,540);
    fr.setLocation(400,130);
    fr.setLayout(new FlowLayout());
    fr.setResizable(false);
    fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container contentPane = fr.getContentPane();
    Color col = new Color(0,213,255);
    contentPane.setBackground(col);

    Arena ar = new Arena();

    fr.add(ar);

    fr.setVisible(true);
}
}
Author: mKorbel, 2013-05-30

1 answers

Pourquoi ne pas utiliser un seul JPanel pour représenter la zone de l'arène, avec un BufferedImage de sauvegarde pour stocker les données de piste? Vous remplaceriez JPanel.paintComponent () pour passer le BufferedImage aux graphiques.drawImage () pour dessiner la scène mise à jour à chaque image. Cela vous donnerait beaucoup plus de résolution, et vous n'auriez qu'à écouter les frappes sur un seul objet. Les collisions peuvent être implémentées en utilisant BufferedImage.getRGB (x, y) pour déterminer si des données de piste avaient déjà été écrites dans le position dans laquelle le cycle entre.

 2
Author: Stephen Carlson, 2013-05-30 06:34:16