存储地形状态的最佳方式?

时间:2011-03-06 10:55:42

标签: javascript canvas terrain

我正在使用canvas构建游戏。

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

Here is an example of the terrain I want to generate

生成此2D地形时......

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

3 个答案:

答案 0 :(得分:2)

我认为您可以安全地将地形存储在2D数组中。拥有像3000x1000这样大小的bool可能看起来很可怕,但是请放心,遍历这样的阵列仍然非常快。您可以遍历整个阵列10次并保持平滑的动画速度。

答案 1 :(得分:1)

Yey,Scorched Earth!据我所知,你甚至可以在原始表面下方轰炸掉圆形的地形(跳跃!)。然后地形将崩溃并填补空白。因此,仅存储表面的多边形顶点坐标是不够的。每像素阵列方法似乎是一个更好的主意。

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

答案 2 :(得分:0)

假设您将地形分割为子方形。

在:

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

后:

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

这些小节可以有三种状态:

  1. 全地形
  2. 全部空白
  3. 分手
  4. 这应该会给你一个不错的优化,而不会严重牺牲代码的可读性。