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