Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 存储地形状态的最佳方法?_Javascript_Canvas_Terrain - Fatal编程技术网

Javascript 存储地形状态的最佳方法?

Javascript 存储地形状态的最佳方法?,javascript,canvas,terrain,Javascript,Canvas,Terrain,我正在使用canvas构建一个游戏 我有在游戏初始化时随机生成的地形。地形可以通过游戏中的武器摧毁 生成此二维地形时 最好只存储每个x坐标的峰值,还是存储每个地形像素 当一部分通过武器伤害移除时,我是否应该关闭该像素,然后重新绘制地形,或者重新绘制地形,同时通过存储的武器伤害检查每个像素是否打开?或者,当武器受到伤害时,我是否应该调整地形状态中的每个峰值,然后重新绘制 是的,焦土!就我所记得的,你甚至可以在原始地表下炸开圆形的地形(蛙跳!)。然后,地形将崩塌并填满空隙。因此,仅存储曲面的多边

我正在使用
canvas
构建一个游戏

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

生成此二维地形时

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

  • 是的,焦土!就我所记得的,你甚至可以在原始地表下炸开圆形的地形(蛙跳!)。然后,地形将崩塌并填满空隙。因此,仅存储曲面的多边形顶点坐标是不够的。每像素阵列方法似乎是一个更好的主意


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

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

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

    之前:

    +---------------------------+
    |           ______       /  |
    |   ___    /      \     /   |
    |  /   \__/        \___/    |
    |-/                         |
    |                           |
    |                           |
    |                           |
    +---------------------------+
    
    之后:

    +---------------------------+
    |    |    | ___|__  |    |  |
    |   _|_   |/   |  \ |   /|  |
    |  / | \__/    |   \|__/ |  |
    |-/--|----------------------|
    |    |    |    |    |    |  |
    |    |    |    |    |    |  |
    |    |    |    |    |    |  |
    +---------------------------+
    
    这些子部分可以有三种状态:

  • 全地形
  • 全部空白
  • 分开

  • 这将在不严重牺牲代码可读性的情况下为您提供体面的优化。

    以30fps的速度重新绘制整个画布对于特定的最大分辨率和最低计算机规格来说是完全合理的。