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