【问题标题】:Best way to store terrain state?存储地形状态的最佳方式?
【发布时间】:2011-03-06 10:55:42
【问题描述】:

我正在使用 canvas 构建游戏。

我有在游戏初始化时随机生成的地形。地形可通过游戏中的武器摧毁。

Here is an example of the terrain I want to generate.

生成此 2D 地形时...

  • 最好只存储每个x 坐标的峰值,还是存储地形的每个像素?
  • 当通过武器伤害移除一部分时,我应该关闭该像素然后重新绘制地形,还是在通过存储的武器伤害检查每个地形是否开启时重新绘制地形?或者,当武器损坏时,我应该调整地形状态的每个峰值,然后重新绘制?

【问题讨论】:

    标签: javascript canvas terrain


    【解决方案1】:

    我认为您可以安全地将地形存储在二维数组中。拥有大小为 3000x1000 的布尔数组可能看起来很可怕,但请放心,遍历这样的数组仍然非常快。您可以遍历整个数组 10 次,仍然保持流畅的动画速度。

    【讨论】:

      【解决方案2】:

      是的,焦土!据我所知,您甚至可以在原始表面下方炸毁圆形体积的地形(跨越式!)。然后地形将崩溃并填补空白。因此,仅存储曲面的多边形顶点坐标是不够的。每像素阵列方法似乎是一个更好的主意。

      重绘问题仍然很困难。我想以 30fps 重绘整个画布是不可行的。也许你可以只重绘受武器影响/崩溃的像素。

      【讨论】:

      • 以 30fps 重绘整个画布对于特定的最大分辨率和最低计算机规格是完全合理的。
      【解决方案3】:

      假设您将地形分割成子方格。

      之前:

      +---------------------------+
      |           ______       /  |
      |   ___    /      \     /   |
      |  /   \__/        \___/    |
      |-/                         |
      |                           |
      |                           |
      |                           |
      +---------------------------+
      

      之后:

      +---------------------------+
      |    |    | ___|__  |    |  |
      |   _|_   |/   |  \ |   /|  |
      |  / | \__/    |   \|__/ |  |
      |-/--|----------------------|
      |    |    |    |    |    |  |
      |    |    |    |    |    |  |
      |    |    |    |    |    |  |
      +---------------------------+
      

      您可以为这些小节设置三种状态:

      1. 全地形
      2. 全部空白
      3. 分手

      这应该会给你一个不错的优化,而不会严重牺牲代码的可读性。

      【讨论】:

        猜你喜欢
        • 2011-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 2018-12-11
        • 2014-06-20
        • 2010-09-14
        • 1970-01-01
        相关资源
        最近更新 更多