将多个图形添加到单个 JPanel
Adding multiple graphics to a single JPanel
我正在尝试添加 3 个图形,其中两个必须移动(大概通过彼此,在一个轴上移动)并且只有最后一个添加到面板显示。
换句话说,我在 JFrame 中添加了很多面板,在最大的面板中我使用特定坐标放置了图形对象。显示代码可能更有帮助。
//the gameArea is the referred-to JPanel, above this code
TankOne tank1 = new TankOne(Color.GREEN);
TankTwo tank2 = new TankTwo(Color.MAGENTA);
FieldBar fieldb = new FieldBar(Color.getHSBColor((float) Math.random(),(float) Math.random(),(float) Math.random()));
JPanel tank1panel = new JPanel();
JPanel tank2panel = new JPanel();
tank1panel.add(tank1);
tank2panel.add(tank2);
gameArea.add(tank1panel);
gameArea.add(tank2panel);
gameArea.add(fieldb);
//repaint code here
如您所见,这是一款坦克游戏。
显示在 GUI 上的是最后一个 gameArea.add。 [这里是 fieldb,一个显示游戏场地的栏]。
我在这里所做的尝试是尝试将两个新面板放入 gameArea Jpanel 中,然后将两个坦克对象放入其中。仍然没有骰子。
是否有解决方法可以让我按像素移动坦克?
我看到一些答案包括切换到网格布局,但我认为这不会帮助看到额外的面板什么也没做。
感谢您的回答。
我猜每个坦克 JPanel 都显示一个坦克的图像(?不是 100% 确定)。一些建议,但请告诉我我的假设是否偏离基础:
- 保持逻辑和视图按照 la M-V-C 良好分离。
- 在一个 JPanel(可能称为 DrawingPanel)的
paintComponent(...)
方法中完成所有图形。
- 背景图像将是在 DrawingPanel 的
paintComponent(...)
方法中绘制的 BufferedImage。
- 坦克本身不会由 JPanel 表示,而是它自己的小 BufferedImage 精灵,再次在 paintComponent 方法中绘制,但在 背景图像之后绘制。
- 每个坦克至少需要 4 个精灵,每个方向一个。
- 如果您的坦克将沿对角线移动,您可能需要更多精灵。
- 还有一个单独的 sprite/image 炮塔。
- 您可以移动精灵的绘制位置以响应其模型表示位置的变化。
- 炮塔旋转也是如此。
我正在尝试添加 3 个图形,其中两个必须移动(大概通过彼此,在一个轴上移动)并且只有最后一个添加到面板显示。
换句话说,我在 JFrame 中添加了很多面板,在最大的面板中我使用特定坐标放置了图形对象。显示代码可能更有帮助。
//the gameArea is the referred-to JPanel, above this code
TankOne tank1 = new TankOne(Color.GREEN);
TankTwo tank2 = new TankTwo(Color.MAGENTA);
FieldBar fieldb = new FieldBar(Color.getHSBColor((float) Math.random(),(float) Math.random(),(float) Math.random()));
JPanel tank1panel = new JPanel();
JPanel tank2panel = new JPanel();
tank1panel.add(tank1);
tank2panel.add(tank2);
gameArea.add(tank1panel);
gameArea.add(tank2panel);
gameArea.add(fieldb);
//repaint code here
如您所见,这是一款坦克游戏。 显示在 GUI 上的是最后一个 gameArea.add。 [这里是 fieldb,一个显示游戏场地的栏]。
我在这里所做的尝试是尝试将两个新面板放入 gameArea Jpanel 中,然后将两个坦克对象放入其中。仍然没有骰子。
是否有解决方法可以让我按像素移动坦克? 我看到一些答案包括切换到网格布局,但我认为这不会帮助看到额外的面板什么也没做。
感谢您的回答。
我猜每个坦克 JPanel 都显示一个坦克的图像(?不是 100% 确定)。一些建议,但请告诉我我的假设是否偏离基础:
- 保持逻辑和视图按照 la M-V-C 良好分离。
- 在一个 JPanel(可能称为 DrawingPanel)的
paintComponent(...)
方法中完成所有图形。 - 背景图像将是在 DrawingPanel 的
paintComponent(...)
方法中绘制的 BufferedImage。 - 坦克本身不会由 JPanel 表示,而是它自己的小 BufferedImage 精灵,再次在 paintComponent 方法中绘制,但在 背景图像之后绘制。
- 每个坦克至少需要 4 个精灵,每个方向一个。
- 如果您的坦克将沿对角线移动,您可能需要更多精灵。
- 还有一个单独的 sprite/image 炮塔。
- 您可以移动精灵的绘制位置以响应其模型表示位置的变化。
- 炮塔旋转也是如此。