# V2.0版本介绍

?> 目前版本**v2.6.6*，上次更新时间：* {docsify-updated} *

目前样板已经更新到V2.0版本以上，本章将对V2.0的一些内容进行介绍。

请确保已经看过前面的几个文档（2.0都有部分更新），前面已经描述过的东西这里将不再赘述。

也欢迎通过看B站的视频教程来具体了解2.0版本的使用方法。

## 目录结构的改变

在1.x中，所有数据和逻辑都是一体的，例如怪物数据和怪物伤害计算公式等等。这导致样板的版本更新时会十分不便。

在2.0中，我们将数据和逻辑进行了分离，拆分成了libs和project两个目录。

- libs目录为游戏核心库文件，包括一些游戏逻辑等内容
- project目录为针对每个塔的目录，是和游戏逻辑是分离的。

我们只需要修改project目录下的各项内容，而无需去动libs目录（有特殊需求除外）；
将来如果想把塔迁移到新的版本上，也只需要迁移project即可。

另外一点的就是，我们将libs目录中的core.js进行了拆分，从而使每个文件的具体工作更加一目了然，也避免了接近6K行的大文件会导致打开IDE的卡顿问题。

## 全GUI造塔

在1.X版本中，我们提供了一个地图编辑器。但是它的功能十分弱，只能进行绘图的功能，实际的各项操作还是需要通过VSCode打开js文件实际进行编写代码。

但是在2.0中，我们大大拓展了地图编辑器的功能，从而达到了“全GUI造塔”的功能，用户再也不用手动打开任何一个文件进行编辑了。

GUI界面分为`地图编辑器`，`事件编辑器`和`文本编辑器`。

!> 即使现在可以全GUI造塔，也强烈建议对1.X的造塔方式进行了解，因为这是一切的基础。

### 地图编辑器

地图编辑器分为三个区域，左侧的`编辑区`,中间的`画布区`,右侧的`素材区`。

画布区下方有切换地图和编辑器模式的下拉菜单,点击`保存地图`后画布的内容才会真正写入到js文件中。

在素材区点击图块时，会选中该图块，此时tips会显示该图块的信息，编辑区会进入图块属性模式，怪物或物品可以直接在里面编辑数值。如果图块的数字和ID没有被定义，则可以直接在左侧定义，**定义新图块后需要保存并刷新页面后才能生效**。

在tips中有图块信息时，在画布上点击或拖拽可以把图块画上去，可以使用ctrl+Z撤销操作以及对应的ctrl+Y恢复撤销。擦除方块可以使用素材区最左上角的擦除块。

点击界面中的空白，tips中的图块信息会被清空，此时再点击画布上的点，则编辑器会进入地图选点模式。此模式下可以编辑改点的`events`,`afterBattle`,`changeFloor`等事件或者是`canMove`来改变各方向的通行状态。

切换地图会使编辑区进入楼层属性模式，这里可以修改首次到达该楼层时会触发的事件`firstArrive`，楼层显示的名称，默认的前景背景图片，默认天气和色调等等。

!> 这里不允许编辑楼层的ID，需要修改ID的场合请直接改js文件，并保持三个标识符完全一致。`data.js`中的`floorIds`也需要对应进行修改。

全塔属性中编辑整个塔为单位的属性，例如起始剧情`startText`，`name`，提供哪些难度，主角的起始属性，全局商店，各种数值以及系统FLAG等。**创建新塔时需要认真编辑这里面的所有选项。**

脚本编辑模式可以修改常用的需要更改的函数。例如，给不同的难度设置不同的内容`setInitData`，加点`addPoint`，以及修改游戏中的关于界面`drawAbout`等等。

追加素材模式可以导入一个图片到该标签的画板中，然后依次点击画板中的图块，点追加就可以按顺序把这些图片添加到对应的画布区素材的最下方，**需要刷新来生效**。

地图编辑模式中可以导入来自地图生成器的地图数组，同时创建新楼层需要在这里通过另存为来实现，可以点清除地图把另存为出的新楼层清空。

!> 编辑区的表格可以直接修改，推荐通过双击，在事件编辑器和文本编辑器中进行编辑。编辑区中的修改需要点保存才会生效。

### 事件编辑器

地图选点中的事件类表格，以及楼层属性中的`firstArrive`和全塔属性的`startText`，在双击时会进入事件编辑器，是由[antlr-blockly](https://github.com/zhaouv/antlr-blockly)生成的图块式的可视化编辑器.

把左侧的方块拖到面板中，下方就会实时的显示对应的js的代码(以及数值不正确时的提示).

每个方块点击右键会展开一个菜单，点帮助可以跳转到此文档中对应的内容。利用好复制功能可以极大提高编辑的效率。注释选项请不要使用，编辑器并不会保留这里的注释。

`template`中提供了一些模板事件，例如战前剧情，打怪开门。

`显示文章`的两个方块，以及`自动剧情文本`，`选项`和`自定义JS脚本`这5个方块，可以通过双击在文本编辑器中(以多行的方式)编辑其中的文字。

### 文本编辑器

事件编辑器之外的内容双击后由文本编辑器来编辑，是有js高亮支持的多行文本编辑器[CodeMirror](https://github.com/codemirror/CodeMirror)，点confirm即可使编辑的文本替换到表格中。

### 拓展地图编辑器

> 面向有一定编程基础的用户

修改`_server/`下的`*comment.js`可以让地图编辑器对自己添加的属性有更好的支持.例如:
+ 给`comment.js`中`enemys`加入新的键值对,就可以更方便的给怪物在UI界面中添加对应的值.
+ 在`data.comment.js`中把自己添加的内容标记为叶节点,不再在表格中展开到最末端.

地图编辑器的部分API见`_server/README.md`

## 部分事件和API更新

在2.0中，有部分的事件和API存在更新，也增加了包括48x32素材的支持，在这里将不再赘述，请仔细阅读前面的几个文档进行了解。
