diff --git a/docs/V2.0.md b/docs/V2.0.md new file mode 100644 index 00000000..66fa428e --- /dev/null +++ b/docs/V2.0.md @@ -0,0 +1,89 @@ +# V2.0版本介绍 + +?> 目前版本**v2.0**,上次更新时间:* {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即可使编辑的文本替换到表格中。 + +### 拓展地图编辑器 + +> 面向有一定编程基础的用户 + +修改`project/`下的`*comment.js`可以让地图编辑器对自己添加的属性有更好的支持.例如: ++ 给`comment.js`中`enemys`加入新的键值对,就可以更方便的给怪物在UI界面中添加对应的值. ++ 在`data.comment.js`中把自己添加的内容标记为叶节点,不再在表格中展开到最末端. + +地图编辑器的部分API见`_server/README.md` + +## 部分事件和API更新 + +在2.0中,有部分的事件和API存在更新,也增加了包括48x32素材的支持,在这里将不再赘述,请仔细阅读前面的几个文档进行了解。 diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 039c2ea0..a7960592 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -3,4 +3,5 @@ - [元件说明](element) - [事件](event) - [个性化](personalization) +- [V2.0版本介绍](V2.0) - [附录:API列表](api) diff --git a/docs/editor.md b/docs/editor.md deleted file mode 100644 index 3b5470b8..00000000 --- a/docs/editor.md +++ /dev/null @@ -1,51 +0,0 @@ -# 地图编辑器使用说明 - -## 地图编辑器 - -UI界面分为3个区域,左侧的编辑区,中间的画布区,右侧的素材区,以及两个弹窗形式的分别是事件编辑器和文本编辑器. - -画布区下方有切换地图和编辑器模式的下拉菜单,点击`保存地图`后画布的内容才会写入到文件中.同时一个显示信息的tips区. - -在素材区点击图块时,会选中该图块,此时tips会显示该图块的信息,编辑区会进入图块属性模式,怪物或物品可以直接在里面编辑数值.如果地图的数字和ID未被定义,可以在左侧定义,定义新图块需要刷新才能生效. - -在tips中有图块信息时,在画布上点击或拖拽可以把图块画上去,可以使用ctrl+Z撤销操作以及对应的ctrl+Y恢复撤销.擦除方块可以使用素材区最左上角的擦除块. - -点击界面中的空白,tips中的图块信息会被清空,此时再点击画布上的点,编辑器会进入地图选点模式.此时可以编辑改点的`events`,`afterBattle`,`changeFloor`等事件或者是`canMove`来改变各方向的通行状态. - -切换地图会使编辑区进入楼层属性模式,这里可以修改首次到达该楼层时会触发的事件`firstArrive`,楼层显示的名称,默认的前景背景图片,默认天气和色调,是否允许使用快捷商店等等.注:这里不允许编辑楼层的ID,需要修改ID的场合请直接改js文件,并保持注释中的三个标识符一致. - -全塔属性中编辑整个塔为单位的属性,例如起始剧情`startText`,塔的ID,提供哪些难度,主角的起始属性起始道具,全局商店,各种数值以及系统FLAG.创建新塔时需要认真编辑这里面的所有选项. - -脚本编辑模式可以修改常用的需要更改的函数.例如,给不同的难度设置不同的内容,加点,推箱子达成后的触发,以及修改游戏中的`关于`界面. - -追加素材模式可以导入一个图片到该标签的画板中,然后依次点击画板中的图块,点追加就可以按顺序把这些图片添加到对应的画布区素材的最下方,需要刷新来生效. - -地图编辑模式中可以导入来自地图生成器的地图数组,同时创建新楼层需要在这里通过另存为来实现,可以点清除地图把另存为出的新楼层清空. - -> 编辑区的表格可以直接修改,推荐通过双击,在事件编辑器和文本编辑器中进行编辑.编辑区中的修改需要点保存才会生效. - -## 事件编辑器 - -地图选点中的表格,以及楼层属性中的`firstArrive`和全塔属性的`startText`,在双击时会进入事件编辑器,是由[antlr-blockly](https://github.com/zhaouv/antlr-blockly)生成的图块式的可视化编辑器. - -把左侧的方块拖到面板中,下方就会实时的显示对应的js的代码(以及数值不正确时的提示). - -每个方块点击右键会展开一个菜单,点帮助可以跳转到此文档中对应的内容.利用好复制功能可以极大提高编辑的效率.注释选项请不要使用,编辑器并不会保留这里的注释. - -template中提供了一些模板事件,例如战前剧情,打怪开门. - -`显示文章`的两个方块,以及`自动剧情文本`,`选项`和`自定义JS脚本`这5个方块,可以通过双击方块,在文本编辑器中(以多行的方式)编辑其中的文字. - -## 文本编辑器 - -事件编辑器之外的内容双击后由文本编辑器来编辑,是有js高亮支持的多行文本编辑器[CodeMirror](https://github.com/codemirror/CodeMirror),点confirm即可使编辑的文本替换到表格中 - -## 拓展地图编辑器 - -> 面向有一定编程基础的用户 - -修改`project/`下的`*comment.js`可以让地图编辑器对自己添加的属性有更好的支持.例如: -+ 给`comment.js`中`enemys`加入新的键值对,就可以更方便的给怪物在UI界面中添加对应的值. -+ 在`data.comment.js`中把自己添加的内容标记为叶节点,不再在表格中展开到最末端. - -地图编辑器的部分API见`_server/README.md` \ No newline at end of file diff --git a/docs/element.md b/docs/element.md index d66b2c41..299c00a6 100644 --- a/docs/element.md +++ b/docs/element.md @@ -1,6 +1,6 @@ # 元件说明 -?> 目前版本**v1.4.1**,上次更新时间:* {docsify-updated} * +?> 目前版本**v2.0**,上次更新时间:* {docsify-updated} * 在本章中,将对样板里的各个元件进行说明。各个元件主要包括道具、门、怪物、楼梯等等。 @@ -37,7 +37,7 @@ 怪物可以有特殊属性,每个怪物可以有多个自定义属性。 -怪物的特殊属性所对应的数字(special)在下面的`getSpecialText`中定义,请勿对已有的属性进行修改。 +怪物的特殊属性所对应的数字(special)在`libs/enemys.js`中的`getSpecialText`中定义,请勿对已有的属性进行修改。 ``` js enemys.prototype.getSpecialText = function (enemyId) { @@ -66,6 +66,8 @@ enemys.prototype.getSpecialText = function (enemyId) { if (this.hasSpecial(special, 19)) text.push("自爆"); if (this.hasSpecial(special, 20)) text.push("无敌"); if (this.hasSpecial(special, 21)) text.push("退化"); + if (this.hasSpecial(special, 22)) text.push("固伤"); + if (this.hasSpecial(special, 23)) text.push("重生"); return text.join(" "); } ``` @@ -125,6 +127,8 @@ N连击怪物的special是6,且我们可以为它定义n代表实际连击数 ![怪物退化](./img/tuihua.png) +固伤怪则需要在后面增加`damage`选项,代表战前扣血数值。 + 如有额外需求,可参见[自定义怪物属性](personalization#自定义自定义怪物属性),里面讲了如何设置一个新的怪物属性。 ## 路障,楼梯,传送门 @@ -153,10 +157,10 @@ floorId指定的是目标楼层的唯一标识符(ID)。 现在我们的H5魔塔支持播放动画,也支持天气系统了。 -要播放动画,你需要先使用“RM动画导出器”将动画导出,放在animates目录下,然后在main.js中定义。 +要播放动画,你需要先使用“RM动画导出器”将动画导出,放在animates目录下,然后再data.js中定义。 ``` js -this.animates = [// 在此存放所有可能使用的动画,必须是animate格式,在这里不写后缀名 +"animates": [// 在此存放所有可能使用的动画,必须是animate格式,在这里不写后缀名 // 动画必须放在animates目录下;文件名不能使用中文,不能带空格或特殊字符 "hand", "sword", "zone", "yongchang", "thunder" // 根据需求自行添加 ] @@ -164,8 +168,6 @@ this.animates = [// 在此存放所有可能使用的动画,必须是animate !> 动画必须是animate格式,名称不能使用中文,不能带空格或特殊字符。 -目前暂时不支持带旋转和翻转的帧。 - 导出动画时可能会进行一些压缩以节省流量,因此清晰度可能不如原版。 动画播放时,是按照每秒20帧的速度(即50ms/帧)。 @@ -192,13 +194,13 @@ this.animates = [// 在此存放所有可能使用的动画,必须是animate 要播放音乐和音效,你需要将对应的文件放在sounds目录下,然后在main.js中进行定义 ``` js -this.bgms = [ // 在此存放所有的bgm,和文件名一致。第一项为默认播放项 +"bgms": [ // 在此存放所有的bgm,和文件名一致。第一项为默认播放项 // 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好 - '058-Slow01.mid', 'bgm.mp3', 'qianjin.mid', 'star.mid' + 'bgm.mp3', 'qianjin.mid', 'star.mid', ]; -this.sounds = [ // 在此存放所有的SE,和文件名一致 +"sounds": [ // 在此存放所有的SE,和文件名一致 // 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好 - 'floor.mp3', 'attack.ogg', 'door.ogg', 'item.ogg' + 'floor.mp3', 'attack.ogg', 'door.ogg', 'item.ogg', 'zone.ogg' ] ``` @@ -245,7 +247,7 @@ this.sounds = [ // 在此存放所有的SE,和文件名一致 - **[ESC]** 打开/关闭系统菜单 - **[H]** 打开帮助页面 - **[Z]** 转向 -- **[R]** 回退 +- **[R]** 回放录像 - **[SPACE]** 轻按(仅在轻按开关打开时有效) - **[1]** 快捷使用破墙镐 - **[2]** 快捷使用炸弹/圣锤 diff --git a/docs/event.md b/docs/event.md index 2966278f..f661e1d3 100644 --- a/docs/event.md +++ b/docs/event.md @@ -1,6 +1,6 @@ # 事件 -?> 目前版本**v1.4.1**,上次更新时间:* {docsify-updated} * +?> 目前版本**v2.0**,上次更新时间:* {docsify-updated} * 本章内将对样板所支持的事件进行介绍。 @@ -20,6 +20,13 @@ 在事件列表中使用`type: show`和`type: hide`可以将一个禁用事件启用,或将一个启用事件给禁用。 +## 关于V2.0的重要说明 + +在V2.0版本中,所有事件均可以使用blockly来进行块的可视化编辑。 + +它能通过拖动、复制粘贴等方式帮助你快速生成事件列表,而不用手动打大量字符。 + +但是,仍然强烈建议要对每个事件的写法进行了解。 ## 自定义事件 @@ -615,13 +622,13 @@ loc可忽略,如果忽略则显示为事件当前点。 ``` js "x,y": [ // 实际执行的事件列表 - {"type": "showImage", "name": "bg", "loc": [231,297]}, // 在(231,297)显示bg.png - {"type": "showImage", "name": "1", "loc": [109,167]}, // 在(109,167)显示1.png + {"type": "showImage", "name": "bg.jpg", "loc": [231,297]}, // 在(231,297)显示bg.jpg + {"type": "showImage", "name": "1.png", "loc": [109,167]}, // 在(109,167)显示1.png {"type": "showImage"} // 如果不指定name则清除所有图片。 ] ``` -name为图片名。**请确保图片在main.js中的this.images中被定义过。** +name为图片名。**请确保图片在data.js中的images中被定义过。** loc为图片左上角坐标,以像素为单位进行计算。 @@ -769,10 +776,12 @@ move完毕后移动的NPC/怪物一定会消失,只不过可以通过immediate ### win: 获得胜利 -`{"type": "win", "reason": "xxx"}` 将会直接调用events.js中的win函数,并将reason作为参数传入。 +`{"type": "win", "reason": "xxx"}` 将会直接调用events.js中的win函数,并将reason作为结局传入。 该事件会显示获胜页面,并重新游戏。 +!> 如果`reason`不为空,则会以reason作为获胜的结局! + ### lose: 游戏失败 `{"type": "lose", "reason": "xxx"}` 将会直接调用`events.js`中的lose函数,并将reason作为参数传入。 @@ -1059,19 +1068,24 @@ core.insertAction(list) //往当前事件列表中插入一系列事件。使用 打败怪物后可以进行加点。 -如果要对某个怪物进行加点操作,则首先需要修改该怪物的点数值,即在怪物定义的后面添加`point`,代表怪物本身的加点数值。 +要启用加点,首先需要在`data.js`中将`enableAddPoint`置为true。 + +如果要对某个怪物进行加点操作,则首先需要修改该怪物的`point`数值,代表怪物本身的加点数值。 ``` js -... 'def': 0, 'money': 1, 'experience': 1, 'special': 0, 'point': 1}, // 在怪物后面添加point代表怪物的加点数 +... 'def': 0, 'money': 1, 'experience': 1, 'point': 1, 'special': 0}, // 在怪物后面添加point代表怪物的加点数 ``` -然后在`events.js`文件中找到`addPoint`函数。它将返回一个choices事件。修改此函数为我们需要的加点项即可。 +然后在`functions.js`文件中找到`addPoint`函数。它将返回一个choices事件。修改此函数为我们需要的加点项即可。 + +!> V2.0版本可以直接在“脚本编辑 - 加点事件”中双击进行修改! ``` js -////// 加点 ////// -events.prototype.addPoint = function (enemy) { - var point = enemy.point; // 获得该怪物的point - if (!core.isset(point) || point<=0) return []; +////// 加点事件 ////// +"addPoint" : function (enemy) { + // 加点事件 + var point = enemy.point; + if (!core.flags.enableAddPoint || !core.isset(point) || point<=0) return []; // 加点,返回一个choices事件 return [ @@ -1230,11 +1244,13 @@ events.prototype.addPoint = function (enemy) { 上面的afterBattle事件只对和怪物进行战斗后才有会被处理。 -如果我们想在使用炸弹后也能触发一些事件(如开门),则可以在`events.js`里面的`afterUseBomb`函数进行处理: +如果我们想在使用炸弹后也能触发一些事件(如开门),则可以在`functions.js`里面的`afterUseBomb`函数进行处理: + +!> V2.0版本可以直接在“脚本编辑 - 使用炸弹后的事件”中双击进行修改! ``` js ////// 使用炸弹/圣锤后的事件 ////// -events.prototype.afterUseBomb = function () { +"afterUseBomb": function () { // 这是一个使用炸弹也能开门的例子 if (core.status.floorId=='xxx' && core.terrainExists(x0,y0,'specialDoor') // 某个楼层,该机关门存在 && !core.enemyExists(x1,y1) && !core.enemyExists(x2,y2)) // 且守门的怪物都不存在 @@ -1262,11 +1278,11 @@ events.prototype.afterUseBomb = function () { !> 推箱子的前方不允许存在任何事件(花除外),包括已经禁用的自定义事件。 -推完箱子后将触发events.js中的afterPushBox事件,你可以在这里进行开门判断。 +推完箱子后将触发functions.js中的afterPushBox事件,你可以在这里进行开门判断。 ``` js ////// 推箱子后的事件 ////// -events.prototype.afterPushBox = function () { +"afterPushBox" = function () { var noBoxLeft = function () { // 地图上是否还存在未推到的箱子,如果不存在则返回true,存在则返回false @@ -1290,6 +1306,33 @@ events.prototype.afterPushBox = function () { } ``` +## 怪物数据的动态修改 + +有时候我们可能还需要在游戏过程中动态修改怪物数据,例如50层魔塔的封印魔王,或者根据难度分歧来调整最终Boss的属性数据。 + +而在我们的存档中,是不会对怪物数据进行存储的,只会存各个变量和Flag,因此我们需要在读档后根据变量或Flag来调整怪物数据。 + +我们可以在functions.js中的`afterLoadData`进行处理。 + +``` js +////// 读档事件后,载入事件前,可以执行的操作 ////// +"afterLoadData" : function(data) { + // 读档事件后,载入事件前,可以执行的操作 + if (core.hasFlag("fengyin")) { // 如果存在封印(flag为真) + core.material.enemys.blackKing.hp/=10; // 将怪物的血量变成原来的十分之一 + // ... + } + // 同样难度分歧可以类似写 if (core.getFlag('hard', 0)==3) {... +} + +// 在封印时,可以调用setValue将该flag置为真,然后调用自定义脚本 core.afterLoadData() 即可。 +"x,y": [ // 封印 + {"type": "setValue", "name": "flag:fengyin", "value": "true"}, + {"type": "function", "function": function() { + core.afterLoadData(); + }} +] +``` ## 战前剧情 @@ -1361,7 +1404,7 @@ events.prototype.afterPushBox = function () { ``` js ////// 不同难度分别设置初始属性 ////// -events.prototype.setInitData = function (hard) { +"setInitData": function (hard) { if (hard=='Easy') { // 简单难度 core.setFlag('hard', 1); // 可以用flag:hard来获得当前难度 // 可以在此设置一些初始福利,比如设置初始生命值可以调用: @@ -1386,7 +1429,7 @@ events.prototype.setInitData = function (hard) { ``` js ////// 游戏获胜事件 ////// -events.prototype.win = function(reason) { +"win": function(reason) { core.ui.closePanel(); var replaying = core.status.replay.replaying; core.stopReplay(); @@ -1396,19 +1439,21 @@ events.prototype.win = function(reason) { core.drawText([ "\t[恭喜通关]你的分数是${status:hp}。" ], function () { - core.events.gameOver('', replaying); + core.events.gameOver(reason||'', replaying); }) }); } ``` -其参数reason为获胜原因(即type:win事件里面的reason参数)。你可以在这里修改自己的获胜界面显示的文字。 +其参数reason为获胜原因(即type:win事件里面的reason参数)。 + +!> 如果reason不为空,则将会作为结局名! 当失败(`{"type": "lose"}`,或者被怪强制战斗打死、被领域怪扣血死、中毒导致扣血死,路障导致扣血死等等)事件发生时,将调用`events.js`中的`lose`事件。其直接显示一段文字,并重新开始游戏。 ``` js ////// 游戏失败事件 ////// -events.prototype.lose = function(reason) { +"lose": function(reason) { core.ui.closePanel(); var replaying = core.status.replay.replaying; core.stopReplay(); @@ -1424,26 +1469,6 @@ events.prototype.lose = function(reason) { 其参数reason为失败原因。你可以在这里修改失败界面时显示的文字。 -如果要设置多种不同的结局,只需要在win的传参中把`core.events.gameOver('', replaying);`的空字符串改成具体的结局名。 - -例如: - -``` js -events.prototype.win = function(reason) { // 传入参数"reason"为结局名 -// ... 上略 - ], function () { - core.events.gameOver(reason, replaying); // 使用reason作为结局名 - }) - }); -} - -// 然后在事件可以调用 -{"type": "win", "reason": "TRUE END"}, // TE结局 -{"type": "win", "reason": "NORMAL END"} // NE结局 -``` - -上面这个例子中,我们直接把reason作为结局名的参数传入gameOver函数,这样的话就可以直接在{"type": "win"}中加上"reason"代表具体的结局。 - ========================================================================================== [继续阅读下一章:个性化](personalization) diff --git a/docs/img/floordata.png b/docs/img/floordata.png index 64db97de..ed28b628 100644 Binary files a/docs/img/floordata.png and b/docs/img/floordata.png differ diff --git a/docs/img/server.png b/docs/img/server.png index 878f6d47..eb905427 100644 Binary files a/docs/img/server.png and b/docs/img/server.png differ diff --git a/docs/personalization.md b/docs/personalization.md index 288d9eeb..3e6fa458 100644 --- a/docs/personalization.md +++ b/docs/personalization.md @@ -1,18 +1,37 @@ # 个性化 -?> 目前版本**v1.4.1**,上次更新时间:* {docsify-updated} * +?> 目前版本**v2.0**,上次更新时间:* {docsify-updated} * 有时候只靠样板本身可能是不够的。我们需要一些个性化、自定义的素材,道具效果,怪物属性,等等。 +## 图层的说明 + +HTML5魔塔是使用画布(canvas)来绘制,存在若干个图层,它们之间有一个覆盖关系,后面的图层将覆盖前面的图层。 + +所有图层从低往高依次如下: + +- bg:背景层;绘制地面素材,或者作为背景的图片素材 +- event:事件层;所有事件(道具、墙壁、NPC、怪物等)都绘制在这一层进行处理 +- hero:勇士层;主要用来绘制勇士 +- event2:事件2层;本层主要用来绘制48x32的图片素材的上半部分(避免和勇士错位),也可以用来绘制该层的前景图片素材 +- fg:显伤层;主要用来绘制怪物显伤和领域显伤 +- animate:动画层;主要用来绘制动画,图块的淡入/淡出效果,图块的移动。showImage事件绘制的图片也是在这一层。 +- weather:天气层;主要用来绘制天气(雨/雪) +- curtain:色调层;用来控制当前楼层的画面色调 +- ui:UI层;用来绘制一切UI窗口,如剧情文本、怪物手册、楼传器、系统菜单等等 +- data:数据层;用来绘制一些顶层的或更新比较快的数据,如左上角的提示,战斗界面中数据的变化等等。 + ## 自定义素材 所有素材的图片都在`images`目录下。 - `animates.png` 为所有动画效果。主要是星空熔岩,开门,毒网,传送门之类的效果。为四帧。 - `autotile.png` 为Autotile块。 -- `enemys.png` 为所有怪物的图片。其对应的数字,从上至下依次是会从201开始计算(即,绿色史莱姆为201,小蝙蝠为205,依次类推)。请注意,动画效果为两帧,一般是原始四帧中的1和3。(四帧中12相同,34相同,因此只取1和3即可) +- `enemys.png` 为所有怪物的图片。 +- `enemy48.png` 为所有48x32怪物的图片。 - `heros.png` 为勇士行走图。 - `items.png` 为所有道具的图标。 -- `npcs.png` 为所有NPC的图标,也是两帧。 +- `npcs.png` 为所有NPC的图标。 +- `npc48.png` 为所有48x32的NPC图标。 - `terrains.png` 为所有地形的图标。 系统会读取`icon.js`文件,并获取每个ID对应的图标所在的位置。 @@ -23,38 +42,38 @@ 如果你需要某个素材已经存在,则可以直接将其覆盖images目录下的同名文件,就能看到效果。 -### 使用自己的图片作为某层楼的背景素材 +### 使用自己的图片作为某层楼的背景/前景素材 由于HTML5功能(素材)有限,导致了对很多比较复杂的素材(比如房子内)等无法有着较好的绘图方式。 为了解决这个问题,我们允许用户自己放置一张或多张图片作为某一层的背景素材。 -要启用这个功能,我们首先需要在`main.js`中将可能的图片进行加载。 +要启用这个功能,我们首先需要在`data.js`中将可能的图片进行加载。 ``` js -this.images = [ // 在此存放所有可能使用的图片 +"images": [ // 在此存放所有可能使用的图片 // 图片可以被作为背景图(的一部分),也可以直接用自定义事件进行显示。 // 图片名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好 // 建议对于较大的图片,在网上使用在线的“图片压缩工具(http://compresspng.com/zh/)”来进行压缩,以节省流量 - "bg.jpg", // 依次向后添加 + "bg.jpg", "house.png", "bed.png"// 依次向后添加 ]; ``` -!> 请使用网上的一些[在线图片压缩工具](http://compresspng.com/zh/)对png图片进行压缩,以节省流量。一张500KB的png图片可以被压缩到20-30KB,显示效果不会有太大差异。 +!> 请使用网上的一些[在线图片压缩工具](http://compresspng.com/zh/)对图片进行压缩,以节省流量。 之后,我们可以在每层剧本的`"images"`里来定义该层的默认背景图片素材。 ``` js -"png": [[x,y,"bg.jpg"]], // 背景图;你可以选择一张或多张图片来作为背景素材。 -"png": [], // 无任何背景图 -"png": [[1,1,"house"], [6,7,"house2"]] // 在(1,1)放一个house.png,且(6,7)放house2.png +"images": [[x,y,"bg.jpg",false]], // 背景图;你可以选择一张或多张图片来作为背景/前景素材。 +"images": [], // 无任何背景图 +"images": [[1,1,"house.png",false], [6,7,"bed.png",true]] // 在(1,1)放一个house.png在背景层,且(6,7)放bed.png在前景层 ``` -png为一个数组,代表当前层所有作为背景素材的图片信息。 +images为一个数组,代表当前层所有作为背景素材的图片信息。 -每一项为一个三元组,分别为该背景素材的x,y和图片名。其中x和y分别为横纵坐标,在0-12之间;图片名则必须在上面的this.images中定义过。 +每一项为一个四元组,分别为该背景素材的x,y,图片名和是否为前景。其中x和y分别为横纵坐标,在0-12之间;图片名则必须在上面的images中定义过。 -你的图片背景素材将会覆盖原来本身的背景层。 +如果第四项为true,则会在前景层(event2)上绘制,能覆盖勇士,常常用来作为柱子的上半部分等情况。 **如果你需要让某些点不可通行(比如你建了个房子,墙壁和家具等位置不让通行),则需在`events`中指定`{"noPass": false}`,参见[自定义事件](event#自定义事件)的写法。 @@ -82,6 +101,8 @@ png为一个数组,代表当前层所有作为背景素材的图片信息。 这是因为,该素材没有被定义,无法被游戏所识别。 +!> 在V2.0中,我们可以简单的在地图编辑器中新增素材的ID和数字,但是仍然**强烈建议**对素材的机制进行了解。 + #### 素材的机制 本塔所有的素材都拥有三个属性:**ID**,**索引**,**数字**。 @@ -91,7 +112,7 @@ png为一个数组,代表当前层所有作为背景素材的图片信息。 **`ID-索引` 对应关系定义在icons.js文件中。该文件将唯一确定一个ID在图片上所在的位置。** -**`ID-数字` 对应关系定义在maps.js文件的getBlock函数中。该函数将唯一确定一个ID对应的数字是多少。** +**`ID-数字` 对应关系定义在maps.js文件中。该函数将唯一确定一个ID对应的数字是多少。** 如果需要添加一个素材到游戏,则必须为其分配一个唯一标识符,并同时修改`icons.js`和`maps.js`两个文件。 @@ -106,7 +127,7 @@ png为一个数组,代表当前层所有作为背景素材的图片信息。 3. 修改对应楼层的剧本文件的`defaultGround`项,改成新的ID。 **如果你要在游戏内使用本地形,则操作如下:** -3. 指定一个数字,在maps.js的getBlock函数下类似进行添加。 +3. 指定一个数字,在maps.js中类似进行添加。 #### 新添加Autotile @@ -114,24 +135,26 @@ png为一个数组,代表当前层所有作为背景素材的图片信息。 1. 将新的Autotile图片复制到images目录下。 2. 进入icons.js,在autotile分类下进行添加该文件的名称,索引简单的写0。 -3. 指定一个数字,在maps.js的getBlock函数下类似进行添加。 +3. 指定一个数字,在maps.js中类似进行添加。 !> Autotile的ID和文件名完全相同!且其ID/文件名不能含有中文、空格或特殊字符。 +!> V2.0版本不能在地图编辑器中添加Autotile,请按上面的操作来执行。 + #### 新添加道具 如果你需要新增一个未被定义的道具: 1. 指定一个唯一的英文ID,不能和现有的重复。 2. 进入icons.js,在items分类下进行添加索引(对应图标在图片上的位置,即index) -3. 指定一个数字,在maps.js的getBlock下类似进行添加。 +3. 指定一个数字,在maps.js中类似进行添加。 4. 在items.js中仿照其他道具,来添加道具的信息。 有关如何自行实现一个道具的效果,参见[自定义道具效果](#自定义道具效果)。 #### 新添加怪物 -如果我们需要新添加怪物,请在enemys.png中新增一行,然后复制粘贴上四帧怪物图的**1和3帧**。 +如果我们需要新添加怪物,请在enemys.png中新增一行。 你可以通过便捷PS工具的“更改色相”来将红头怪变成橙头怪等。 @@ -139,9 +162,11 @@ png为一个数组,代表当前层所有作为背景素材的图片信息。 1. 指定一个唯一的英文ID,不能和enemys中现有的重复。 2. 进入icons.js,在enemys分类下进行添加索引(对应图标在图片上的位置,即index) -3. 在maps.js的getBlock下继续进行添加。请注意其ID为200开始的顺序,即如果新增一行为261,依次类推 +3. 在maps.js中继续进行添加。 4. 在enemys.js中仿照其他怪物,来添加怪物的信息。 +!> 如果是48x32的怪物素材,请放在enemy48.png中,然后在icons.js的enemy48下添加索引。 + 有关如何自行实现一个怪物的特殊属性或伤害计算公式,参见[怪物的特殊属性](#怪物的特殊属性)。 #### 新添加NPC @@ -150,6 +175,8 @@ png为一个数组,代表当前层所有作为背景素材的图片信息。 2. 进入icons.js,在npcs分类下进行添加索引(对应图标在图片上的位置,即index) 3. 指定一个数字,在maps.js的getBlock下类似进行添加。 +!> 如果是48x32的怪物素材,请放在npc48.png中,然后在icons.js的npc48下添加索引。 + ### 地图生成器使用自定义素材 地图生成器是直接从js文件中读取数字-图标对应关系的。 @@ -166,30 +193,24 @@ png为一个数组,代表当前层所有作为背景素材的图片信息。 对于即捡即用类道具,如宝石、血瓶、剑盾等,我们可以简单地修改`data.js`中的value一栏即可。 -如果你有更高级的需求(例如每个区域的效果不同),则需要编辑`items.js`文件。具体方式是: +如果你想要同种宝石在不同层效果不同的话,可以进行如下操作: + +1. 在楼层的item_ratio中定义宝石的比率(比如1-10的写1,11-20层写2等) +2. 修改获得道具的itemEffect函数(在items.js中的itemEffect中编辑,V2.0中也可以使用编辑器) -1. 找到`getItemEffect`函数;所有即捡即用类道具的效果都在这里实现。 -2. 算道具效果系数,或应该增加的值。 ``` js -items.prototype.getItemEffect = function(itemId, itemNum) { - var itemCls = core.material.items[itemId].cls; - // 消耗品 - if (itemCls === 'items') { - var floor = parseInt(core.status.thisMap.name); // 获得当前楼层。此name和剧本中的name完全一致。 - var ratio = 1; // 道具效果系数 - if (floor>=11 && floor<=20 ) ratio = 2; // 11-20F(二区),道具效果翻倍 - if (floor>=21 && floor<=30 ) ratio = 3; // 21-30F(二区),道具效果三倍 - // ... 根据自己的需要来写 - - if (itemId === 'redJewel') core.status.hero.atk += core.values.redJewel * ratio; // 将初始效果乘以倍数 - if (itemId === 'blueJewel') core.status.hero.def += core.values.blueJewel * ratio; // 将初始效果乘以倍数 - if (itemId === 'greenJewel') core.status.hero.mdef += core.values.greenJewel * ratio; // 将初始效果乘以倍数 - if (itemId == 'yellowJewel') { // 黄宝石属性:需自己定义 -// ... 下略 +// ratio为楼层的item_ratio值,可以进行翻倍宝石属性 +core.status.hero.atk += core.values.redJewel * ratio ``` -3. 修改同样修改下面的`getItemEffectTip`函数,使提示文字相应变动。 -!> **请注意这里`core.status.thisMap.name`获取的是当前层中,你在剧本文件里写的name那一项(即状态栏中的层数显示)。然后可以通过几个简单的if来判断应该增加的值。** +这里我们可以直接写ratio来取用该楼层中定义的`item_ratio`的值。 + +如果不是倍数增加(比如线性增加)也可以类似来写 + +``` js +// 一个二倍线性增加的例子 +core.status.hero.atk += core.values.redJewel + 2*ratio +``` ### 消耗类道具(cls: tools);永久类道具(cls: constants) @@ -212,12 +233,10 @@ events.prototype.passNet = function (data) { ### 实战!拿到神圣盾后免疫吸血、领域、夹击效果 -1. 在getItemEffect中修改拿到神圣盾时的效果,标记一个自定义Flag。 +1. 在itemEffect中修改拿到神圣盾时的效果,标记一个自定义Flag。 ``` js -if (itemId === 'shield5') { - core.status.hero.def += core.values.shield5; - core.setFlag("shield5", true); // 增加一个自定义Flag:已经拿到神圣盾 -} +core.status.hero.def += core.values.shield5 * ratio; +core.setFlag("shield5", true); // 增加一个自定义Flag:已经拿到神圣盾 ``` 2. 免疫吸血效果:在`enemys.js`的伤害计算中,编辑成如果存在神圣盾标记,吸血伤害为0。 ``` js @@ -239,10 +258,10 @@ enemys.prototype.calDamage = function (monster, hero_hp, hero_atk, hero_def, her } // ... 下略 ``` -3. 免疫领域、夹击、阻击效果:在`core.js`中,找到checkBlock函数,并编辑成如果有神圣盾标记,则将伤害变成0。 +3. 免疫领域、夹击、阻击效果:在`control.js`中,找到checkBlock函数,并编辑成如果有神圣盾标记,则将伤害变成0。 ``` js // 检查领域、夹击、阻击事件 -core.prototype.checkBlock = function () { +control.prototype.checkBlock = function () { var x=core.getHeroLoc('x'), y=core.getHeroLoc('y'); var damage = core.status.checkBlock.damage[13*x+y]; if (damage>0) { @@ -269,9 +288,9 @@ core.prototype.checkBlock = function () { 如果要修改伤害计算公式,请修改下面的calDamage函数。请注意,如果无法战斗,该函数必须返回`999999999`。 -对于毒衰弱怪物的战斗后结算在`events.js`中的afterBattle函数中。 +对于毒衰弱怪物的战斗后结算在`functions.js`中的afterBattle函数中。 -对于领域、夹击、阻击怪物的检查在`events.js`中的checkBlock函数中。 +对于领域、夹击、阻击怪物的检查在`control.js`中的checkBlock函数中。 `getCritical`, `getCriticalDamage`和`getDefDamage`三个函数依次计算的是该怪物的临界值、临界减伤和1防减伤。也可以适当进行修改。 diff --git a/docs/start.md b/docs/start.md index c9a838c0..07dddcde 100644 --- a/docs/start.md +++ b/docs/start.md @@ -1,6 +1,6 @@ # 快速上手 -?> 目前版本**v1.4.1**,上次更新时间:* {docsify-updated} * +?> 目前版本**v2.0**,上次更新时间:* {docsify-updated} * 在这一节中,将详细介绍做一部塔的流程。现在,让我们来做一部单层塔! @@ -12,9 +12,18 @@ - Chrome浏览器。其他浏览器可能会导致本地服务器产生闪退等现象。 - 一个很好的文本编辑器。推荐带有高亮染色、错误提示等效果。例如:WebStorm,VSCode,或者至少也要Sublime Text。 - ([VSCode下载地址](https://code.visualstudio.com/),群里的群文件中也有,强烈推荐之。) + - **2.0版本可以不需要,但是仍然强烈推荐有一个,从而能对H5造塔有更深的了解。** 只要满足了上述条件,你就可以开始做自己的塔啦! +## V2.0的使用 + +目前版本已经更新到V2.0,在2.0版本中,我们可以进行全GUI造塔。 + +下面的文档主要是讲如何通过代码编辑的方式来造,仍然强烈建议进行阅读从而有着一定的了解。 + +如果想直接知道如何在V2.0造塔,可以直接参见[V2.0版本介绍](V2.0)的说明,或者看[B站视频教程](http://www.bilibili.com/video/av17608025/)。 + ## 启动HTTP服务 在根目录下有一个“启动服务.exe”,运行之。 @@ -25,6 +34,7 @@ * “地图编辑器”允许你以可视化的方式进行编辑地图。 * “便捷PS工具”能让你很方便的对自定义素材进行添加。参见[自定义素材](personalization#自定义素材)。 * “地图生成器”能让你从已有的截图(如RMXP项目)中立刻生成可被本样板识别的地图数据。 +* “RM动画导出器”能让你从RMXP中导出动画而被H5魔塔使用。 * “JS代码压缩工具”能对JS代码进行压缩,从而减少IO请求数和文件大小。 * “伤害和临界值计算器”是一个很便捷的小工具,能对怪物的伤害和临界值进行计算。 @@ -34,7 +44,7 @@ 类似于RMXP,本塔每层楼都是一个“剧本”,剧本内主要定义了本层的地图和各种事件。主函数将读取每个剧本,并生成实际的地图供游戏使用。 -我们打开 `libs/floors/` 目录,这个目录是所有剧本的目录。我们需要指定一个楼层名,例如MT1;然后,我们可以将`MT0.js`(模板)复制重命名为为`MT1.js`,并使用文本编辑器打开。 +我们打开 `project/floors/` 目录,这个目录是所有剧本的目录。我们需要指定一个楼层名,例如MT1;然后,我们可以将`MT0.js`(模板)复制重命名为为`MT1.js`,并使用文本编辑器打开。 ![新建剧本](./img/script.png) @@ -43,11 +53,14 @@ 具体样板文件的每个要素如下: - **`floorId`** 楼层唯一标识符;必须和文件名,以及 `main.floors.xxx` 完全一致 - **`title`** 楼层中文名,将在切换楼层时进行显示 +- **`name`** 楼层再状态栏显示的名称 - **`canFlyTo`** 当前楼层可否被楼传器飞到。如果该层不能飞到,则也在该层也不允许使用楼传器。 - **`canUseQuickShop`** 当前楼层可否使用快捷商店。 -- **`defaultGround`** 该层的背景(地面)素材。需要是在`icon.js`里`terrains`中定义的一个ID,如`ground`, `grass2`等等。 -- **`color`** 该层的画面色调。本项可选,如果不写则色调为默认值(无色调),否则是一个RGBA数组,比如`[255,0,0,0.3]`等。 +- **`defaultGround`** 该层的背景(地面)素材。 +- **`images`** 该层默认显示的前景/背景图片 +- **`color`** 该层的画面色调。 - **`bgm`** 到达该层后默认播放的BGM。本项可忽略。 +- **`item_ratio`** 该层的宝石/血瓶倍率 - **`map`** 本层地图,需要是13x13数组,建议使用地图生成器或者可视化地图编辑器制作。 - **`firstArrive`** 第一次到该楼层触发的事件 - **`events`** 该楼的所有可能事件列表 @@ -55,6 +68,7 @@ - **`afterBattle`** 战斗后可能触发的事件列表 - **`afterGetItem`** 获得道具后可能触发的事件列表 - **`afterOpenDoor`** 开完门后可能触发的事件列表 +- **`cannotMove`** 每个图块不可通行的方向,也就是悬崖效果 我们最终的任务其实是,将每个楼层的剧本(地图&事件)给写完即可。 @@ -72,12 +86,14 @@ 然后可以在上面任意进行绘制地图。 -!> **如果地图的数字和ID未被定义,则会进行提示:数字和ID未被定义!此时可能需要手动在icons.js和maps.js中定义对应的数字和ID。请参见[自定义素材](personalization#自定义素材)。** +!> **如果地图的数字和ID未被定义,则会进行提示:数字和ID未被定义!此时要对素材的ID和数字进行定义,请参见[自定义素材](personalization#自定义素材)。** 绘制地图完毕后,点击"导出地图",即可在左边看到对应的JSON数组,并且已经复制到了剪切板。将其粘贴到剧本中的map位置即可。 ![地图数组](./img/maparray.png) +!> V2.0版本可以直接将当前地图进行保存或另存为,不需要这样手动打开进行编辑。 + ### 从RMXP导入已有的地图 如果我们想复刻一个现有的,已经被RMXP所制作的塔,也有很便捷的方式,那就是用到我们的“地图生成器”。 @@ -117,6 +133,8 @@ 我们打开`data.js`文件,这里面定义了各种全局属性和勇士初始值。 +!> V2.0版本可以直接在地图编辑器的`全塔属性`中进行修改! + 我们可以将本塔标题改名为“1层小塔”, 游戏的唯一标识符叫onefloor,然后可以直接修改勇士的各项初始数据. @@ -139,12 +157,12 @@ 其他的几项暂时不会被涉及到,因此不用考虑。 -全局变量修改完毕后,我们需要告诉主函数加载该楼层。打开`main.js`(该文件和index.html同级),找到`this.floorIds`项,将其值改为楼层ID即MT1。 - -![修改楼层数据](./img/floordata.png) +全局变量修改完毕后,我们需要告诉主函数加载该楼层。打开`data.js`,找到`floorIds`项,将其值改为楼层ID即MT1。 最后一步就是录入怪物数据。打开`enemys.js`文件,依次输入你在本塔内使用到的所有怪物的攻防血的数据。其中怪物的特殊属性(special项)与该文件下面的getSpecialText对应。 +!> V2.0版本可以直接在“图块属性”一栏进行修改怪物属性! + ![怪物数据](./img/enemyarray.png) 只需要修改自己用到的怪物属性即可,其他没有用到的怪物完全无所谓。 @@ -177,7 +195,7 @@ 1. 截图请务必刚好截取13x13的图片,并需要保证每个位置必须为32x32像素。一般无放缩的RMXP符合条件。 2. 游戏的唯一标识符name请务必修改。如果不修改可能会导致存档出现异常。 -3. 别忘了main.js中要修改floorIds指明所用到的所有楼层哦~ +3. 别忘了data.js中要修改floorIds指明所用到的所有楼层哦~ 下面是几个常见的FAQ: diff --git a/project/floors/MT0.js b/project/floors/MT0.js index dc4996fe..03a7db4b 100644 --- a/project/floors/MT0.js +++ b/project/floors/MT0.js @@ -9,7 +9,7 @@ main.floors.MT0 = "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "ground", // 默认地面的图块ID(terrains中) - "png": [], // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 + "images": [], // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 // "color": [0,0,0,0.3], // 该层的默认画面色调。本项可不写(代表无色调),如果写需要是一个RGBA数组。 // "weather": ["snow",5], // 该层的默认天气。本项可忽略表示晴天,如果写则第一项为"rain"或"snow"代表雨雪,第二项为1-10之间的数代表强度。 // "bgm": "bgm.mp3", // 到达该层后默认播放的BGM。本项可忽略。 diff --git a/project/floors/sample0.js b/project/floors/sample0.js index 63495eb3..804dee94 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -9,7 +9,7 @@ main.floors.sample0 = "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "ground", // 默认地面的图块ID(terrains中) - "png": [], // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 + "images": [], // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 // "color": [0,0,0,0.3] // 该层的默认画面色调。本项可不写(代表无色调),如果写需要是一个RGBA数组。 // "weather": ["snow",5], // 该层的默认天气。本项可忽略表示晴天,如果写则第一项为"rain"或"snow"代表雨雪,第二项为1-10之间的数代表强度。 "bgm": "bgm.mp3", // 到达该层后默认播放的BGM。本项可忽略。 diff --git a/project/floors/sample1.js b/project/floors/sample1.js index 04775340..669d67b1 100644 --- a/project/floors/sample1.js +++ b/project/floors/sample1.js @@ -9,7 +9,7 @@ main.floors.sample1 = "canFlyTo": true, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "grass", // 默认地面的图块ID(terrains中) - "images": [[0,0,"bg.jpg",false]], // // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 + "images": [[0,0,"bg.jpg",false]], // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 // "color": [0,0,0,0.3] // 该层的默认画面色调。本项可不写(代表无色调),如果写需要是一个RGBA数组。 "weather": ["snow",6], // 该层的默认天气。本项可忽略表示晴天,如果写则第一项为"rain"或"snow"代表雨雪,第二项为1-10之间的数代表强度。 // "bgm": "bgm.mp3", // 到达该层后默认播放的BGM。本项可忽略。 diff --git a/project/floors/sample2.js b/project/floors/sample2.js index 233473a0..6f6e5f7b 100644 --- a/project/floors/sample2.js +++ b/project/floors/sample2.js @@ -9,7 +9,7 @@ main.floors.sample2 = "canFlyTo": false, // 该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器) "canUseQuickShop": true, // 该层是否允许使用快捷商店 "defaultGround": "snowGround", // 默认地面的图块ID(terrains中) - "png": [], // // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 + "images": [], // // 该层默认显示的所有图片;详细用法请查看文档“自定义素材”中的说明。 "color": [255,0,0,0.3], // 该层的默认画面色调。本项可不写(代表无色调),如果写需要是一个RGBA数组。 "weather": ["rain",10], // 该层的默认天气。本项可忽略表示晴天,如果写则第一项为"rain"或"snow"代表雨雪,第二项为1-10之间的数代表强度。 "bgm": "qianjin.mid", // 到达该层后默认播放的BGM。本项可忽略。