【问题标题】:Storing ImageIcons存储 ImageIcons
【发布时间】:2014-04-02 08:40:26
【问题描述】:

我得到了 90 张形成爆炸动画的奇怪图像。当我开始“播放”动画时,我使用 Swing Timer 为 JLabel 设置新图标,然后循环播放直到到达最后一张图像。

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

爆炸在游戏中很常见,我有两种尺寸(当我希望它们快速交换时,为每种尺寸的爆炸缩放每个图像似乎相当低效),这需要 200 个图像(回旋处)。

存储还是加载?

【问题讨论】:

  • 每次加载它们通常会更快,并且取决于您现在经常使用它们,可能会减少资源密集度

标签: java swing animation graphics imageicon


【解决方案1】:

对于游戏来说,使用 Swing 组件来表示游戏对象(Sprites)可能不是最好的方式。我会使用单个 JPanel 作为渲染组件并重写它的 paintComponent() 方法来为我自己的游戏对象进行渲染。

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

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

如果图像数据很容易放入内存,我会在开始之前加载所有图像。如果有太多图像无法全部预加载,我会使用某种缓存来保留尽可能多的图像 - 缓存可能会使用基于 LRU 的方案来决定当它已满时要保留哪些图像。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多