【问题标题】:Paint player and landscape in game?在游戏中绘制玩家和风景?
【发布时间】:2011-04-05 02:40:53
【问题描述】:

我只是在做一个小游戏来获得更多的java经验。包含所有视觉内容的面板有一个二维数组作为基于瓷砖的景观的网格,我喜欢草、树和水。为了在正确的图块上正确绘制正确的图片,需要大量的 if 语句等。它看起来不太好,所以我将水瓦的所有 if 语句(确定它是北海岸还是海洋等)移到他们自己的方法中,但我注意到它在我尝试时减慢了很多移动我的角色。我意识到每次移动时都重新绘制背景是愚蠢的,因为它几乎保持不变。那么,我怎样才能只绘制背景并保留它,但仍然在角色以合理的速度在面板上移动时为角色重新绘制精灵?

【问题讨论】:

  • 你也只需要重新绘制角色过去和现在的背景。

标签: java jpanel repaint performance


【解决方案1】:

我也遇到过类似的情况,我只是想在股票图表上移动一条注册线,而无需为该线的新位置重新绘制股票图表。

答案是使用缓冲图像。在图像上绘制静态部分,将其存储为屏幕外图像,然后在每次您希望在图像上绘制移动对象时调用以筛选它。它很容易实现,而且效果很好。

希望这会有所帮助。

约翰·R·多纳

【讨论】:

    【解决方案2】:

    使用带有背景图像的 JPanel。将面板设置为 GridLayout 并将 JLabels 添加到每个网格。然后您可以使用标签的 setIcon(...) 方法将播放器从一个网格移动到另一个网格。所以基本代码是:

    oldLabel.setIcon(null); newLabel.setIcon(...);

    现在 Swing 将只重绘两个发生变化的方格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      相关资源
      最近更新 更多