Tron Bike Game Java(通过JPanels移动角色)

时间:2013-05-30 03:50:14

标签: java arrays swing jpanel

我正在设计一个使用Java的Tron Bike游戏,其中有两个角色在他们不断移动时会在他们后面发出一条小道。

Arena包含JFrame中JPanel中的2-d JPanel数组。我发现这种结构最容易。

我无法弄清楚如何通过多个JPanel实际移动角色并让它们转向KeyListener。任何帮助或想法将不胜感激。

以下是我的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);
}
}

1 个答案:

答案 0 :(得分:2)

为什么不使用单个JPanel来表示竞技场区域,并使用BufferedImage支持来存储路径数据?您将覆盖JPanel.paintComponent()以将BufferedImage传递给Graphics.drawImage()以在每帧中绘制更新的场景。这将为您提供更多分辨率,您只需要监听单个对象上的击键。可以使用BufferedImage.getRGB(x,y)来实现冲突,以确定是否已将任何跟踪数据写入循环进入的位置。