存储ImageIcons

时间:2014-04-01 19:20:09

标签: java swing animation graphics imageicon

我收到了90张奇怪的图片,形成了爆炸动画。当我“播放”动画时,我使用Swing TimerJLabel设置一个新图标,并循环直到我到达最后一张图像。

我的问题是:在某个地方以某种静态形式加载和存储所有ImageIcons是否更好,或者每次需要时从文件加载它们?

爆炸在游戏中很常见,我有两种尺寸(当我希望它们非常快速地交换时,每种尺寸的爆炸缩放每个图像看起来相当低效),这使得200张图像(环形交叉口)。

存储或加载?

2 个答案:

答案 0 :(得分:2)

对于游戏,使用Swing组件来表示游戏对象(精灵)可能不是最好的方法。我会使用单个JPanel作为渲染组件,并覆盖其paintComponent()方法,以便为我自己的游戏对象进行渲染。

通过这种方式,您可以避免处理Swing组件的复杂性(例如,它们可能会在它们真正绘制的位置添加不需要的间隙/偏移,以及它们使得控制绘制顺序变得更加困难 - 当两个对象重叠时很重要。)

我不会使用任何类型的Icon,只需使用java.awt.Image,或者使用拥有类型来表示图像(例如,渲染 part 底层图像 - 如精灵表所要求的那样)。 Icon并没有真正为游戏添加任何价值。

如果图像数据很容易融入内存,我会在开始之前加载所有图像。如果有太多的图像要预先加载它们,我会使用某种类型的缓存来保留尽可能多的图像 - 缓存可以使用基于LRU的方案来决定哪些图像在它满了时保留。

答案 1 :(得分:1)

  

我使用SwingTimer为JLabel设置一个新图标,并循环直到我到达最后一张图像。

您可能需要考虑使用Animated Icon。它可以在任何可以使用Icon的地方使用。

AnimatedIcon类使用加载的图标,所以我想我的答案是预加载以方便使用和CPU效率。