我创建了一个包含所有图形的 JPanel 画布;即JLabel。要使动画精灵工作,您必须覆盖扩展 JLabel 类的paintComponent。我已经以这种方式成功实现了动画精灵。
拥有一个 Graphics2D 画布然后在自己的 Graphics2D 中有多个“图像”是不好的做法吗?
我创建了一个包含所有图形的 JPanel 画布;即JLabel。要使动画精灵工作,您必须覆盖扩展 JLabel 类的paintComponent。我已经以这种方式成功实现了动画精灵。
拥有一个 Graphics2D 画布然后在自己的 Graphics2D 中有多个“图像”是不好的做法吗?
我认为它不会太重,因为Graphics2D
你的JPanel
应该与传递给的相同,JLabel
但具有不同的边界和偏移量。
我的意思是 Swing 没有分配新的图形上下文,您可以在其上显示对象层次结构中的每个元素,但它使用具有不同功能的相同元素。这并不意味着它们panel.getGraphics() == label.getGraphics()
都不是完全不同的对象。
无论如何,如果您需要做很多动画工作,我建议您拥有自己的精灵类
class Sprite
{
Point2D position;
Rectangle2D size;
float rotation;
}
并在同一paintComponent
级别处理所有事情。或者至少我一直都是这样做的,因为 Java2D 不像 CoreAnimation 那样被用于在每层的基础上移动/动画内容。