我收到了90张奇怪的图片,形成了爆炸动画。当我“播放”动画时,我使用Swing Timer
为JLabel
设置一个新图标,并循环直到我到达最后一张图像。
我的问题是:在某个地方以某种静态形式加载和存储所有ImageIcons
是否更好,或者每次需要时从文件加载它们?
爆炸在游戏中很常见,我有两种尺寸(当我希望它们非常快速地交换时,每种尺寸的爆炸缩放每个图像看起来相当低效),这使得200张图像(环形交叉口)。
存储或加载?
答案 0 :(得分:2)
对于游戏,使用Swing组件来表示游戏对象(精灵)可能不是最好的方法。我会使用单个JPanel作为渲染组件,并覆盖其paintComponent()方法,以便为我自己的游戏对象进行渲染。
通过这种方式,您可以避免处理Swing组件的复杂性(例如,它们可能会在它们真正绘制的位置添加不需要的间隙/偏移,以及它们使得控制绘制顺序变得更加困难 - 当两个对象重叠时很重要。)
我不会使用任何类型的Icon,只需使用java.awt.Image,或者使用拥有类型来表示图像(例如,渲染 part 底层图像 - 如精灵表所要求的那样)。 Icon并没有真正为游戏添加任何价值。
如果图像数据很容易融入内存,我会在开始之前加载所有图像。如果有太多的图像要预先加载它们,我会使用某种类型的缓存来保留尽可能多的图像 - 缓存可以使用基于LRU的方案来决定哪些图像在它满了时保留。
答案 1 :(得分:1)
我使用SwingTimer为JLabel设置一个新图标,并循环直到我到达最后一张图像。
您可能需要考虑使用Animated Icon。它可以在任何可以使用Icon的地方使用。
AnimatedIcon
类使用加载的图标,所以我想我的答案是预加载以方便使用和CPU效率。