0

我正在使用 Java 设计一个 Tron Bike 游戏,其中有两个角色在他们不断移动时在他们身后留下踪迹。

Arena 由 JFrame 中的 JPanel 中的 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);
}
}
4

1 回答 1

2

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

于 2013-05-30T06:34:16.493 回答