mota-js/_docs/element.md
AutumnOrange51 321d5c5ada update docs
2020-05-24 23:24:30 +08:00

24 KiB
Raw Blame History

元件说明

?> 目前版本v2.7,上次更新时间:* {docsify-updated} *

在本章中,将对样板里的各个元件进行说明。各个元件主要包括道具、门、怪物、楼梯等等。

请打开样板0层 sample0.js 进行参照对比。

生成地图

道具

样板自带的所有道具在样板0层中已全部给出。当你在样板0层中拿到某个宝物时会有提示这里不再赘述详见拿到该道具的说明。

大多数宝物都有默认的效果,屠龙匕首暂未定义,如有自己的需求可参见自定义道具效果

拿到道具后将触发afterGetItem事件从V2.7起,afterGetItem 脚本提供了一个参数表示该道具是否是通过轻按捡到的,对应的事件也允许在轻按时不予触发),有关事件的详细介绍请参见事件

如需修改某个道具的效果,在不同区域宝石数据发生变化等问题,请参见自定义道具效果的说明。
有关轻按,在全塔属性的系统开关中有定义。如果勾选了 enableGentleClick ,则鼠标(触摸屏)通过双击勇士,键盘通过空格,手机通过虚拟数字键 7 可达到轻按效果,即不移动而获得周围物品。

装备

如果需要让剑盾等变成装备,可以直接在它们的图块属性中把 cls 一项改为 equips
从V2.4.1开始HTML5魔塔样板终于拥有了属于自己的装备页面。

装备栏的设置,装备类型

在全塔属性中,有一个equipName项,其定义了本塔的所有可装备的装备栏。
其需要是一个长度为正数且不大于 6 15×15 样板为不大于 8 )的一维数组,其中每一项为装备栏的名称,建议是两个汉字
例如下面这种写法就是定义了四个装备孔,名称分别为武器、防御、首饰和魔杖。

"equipName": ["武器","防具","首饰","魔杖"]

这么定义好后装备类型即为每个装备孔的索引从0开始

武器的装备类型是0防御的装备类型是1首饰的装备类型是2魔杖的装备类型是3。

设置每个装备的属性

如果要将一个道具设置为装备,首先需要将其cls设为equips

然后在图块属性的equip一项中设置装备的具体属性。从V2.7起,该项通过事件编辑器编辑。分为以下几项:

  1. 类型:自然数或字符串常量,和前面的 equipName 对应,填字符串一般是因为 equipName 中有重复项(比如可以装备两件饰品什么的)。
  2. 普攻动画:一个已注册的 .animate 文件名(这里不再写后缀),只对第一个装备位才有效。具体可参见动画和天气系统
  3. 数值提升项:若干个键值对,表示该装备增加属性的常数值(支持负数,会影响 core.getStatus() 的结果,可以用 core.getEquippedStatus() 来获取7个常用属性可以通过下拉框选取自定义的新属性也可以手动输入。
  4. 百分比提升项:若干个键值对,表示该装备增加属性的百分比(支持负数,会影响 core.getRealStatus() 的结果,可以用 core.getBuff() 来获取。最终的状态栏属性向下取整,百分比之间用加法叠加,且晚于常数结算),修改方法同上,精确到千分之一。

检测是否存在装备

可以使用core.hasEquip(itemId)来检测是否装上某个装备。

使用core.hasItem(itemId)来检测是否存在一个未装上的装备。

使用core.getEquip(equipType)来获得某个装备类型的当前装备。

更多相关API详见附录API列表

多重装备

从V2.5.4开始,允许支持多重装备,即有若干的装备可共用若干的格子(例如永不复还那样)。

要实现这一点,上面的写法有所改变。
在全塔属性中的equipName项写法不变,不过可以写重复的装备孔名称。(但仍然最多只能写 6 或 8 个)

"equipName": ["武器", "武器", "武器", "防具", "防具", "首饰"] 

然后对于某个装备,将其type(装备类型)写对应的装备孔名称即可。

这样写的话,则所有该名称的装备孔均可装上此装备。

当尝试装上此装备时,会取最小的一个空的装备孔进行装备。如果没有空闲的装备孔,则会提示“请先卸下装备”。

装备动画仍然会取第一个装备类型为0的装备的animate项,即使装备了多个有动画的武器。

样板自带6种门黄蓝红绿铁花。前四种门需要有对应的钥匙打开花门只能通过调用 openDoor 事件进行打开。铁门是否需要钥匙,由全塔属性的 steelDoorWithoutKey 开关控制,详见“万能铁门钥匙”道具的拾取效果。
开门后可触发该点的 afterOpenDoor 事件,有关事件的详细介绍请参见事件
如果要新增自己的门支持32×48尺寸请参见新增门和对应的钥匙

暗墙

样板支持暗墙。要制作一个暗墙非常简单:在该点直接放一个普通墙壁,然后事件写“开门”,坐标为该点就行。

// 该点画一个普通的墙壁,比如`yellowWall`

// 在该点的事件events中:
[{"type": "openDoor"}] // 直接使用开门事件,坐标可忽略表示当前点

系统会自动调用animates中的开暗墙动画。样板自带如下ID支持以这种方式开门

yellowDoor, blueDoor, redDoor, greenDoor, specialDoor, steelDoor,
yellowWall, blueWall, whiteWall

怪物

样板自带的怪物列表参见 project\enemys.js 。其与 images\enemys.png 素材按顺序一一对应。
如有自己的怪物素材需求请参见自定义素材的内容。

怪物可以有特殊属性,每个怪物可以有多个自定义属性。

怪物的特殊属性所对应的数字special在脚本编辑中的getSpecials中定义,请勿对已有的属性进行修改。
多属性可直接从图块属性勾选。怪物可以负伤,由全塔属性的系统开关 enableNegativeDamage 指定。
打败怪物后可以进行加点操作。有关加点塔的制作可参见加点事件
如果全塔属性中的“显示经验值”未勾选,即不启用经验的话,怪物手册里将不显示怪物的经验值,打败怪物也不获得任何经验。
拿到幸运金币后,打怪获得的金币将翻倍。如果怪物勾选了 notBomb ,则这个种类的怪物均不可被炸。
N连击怪物的special是6且我们可以为它定义n代表实际连击数。参见样板中剑王的写法。
吸血怪需要给怪物设置value代表吸血的比例。可以给吸血怪勾选 add 来将吸血的数值加到自身上。
但这样做以后,红色的预估伤害往往带有误导性,这点还务请注意!
中毒怪让勇士中毒后,每步扣减的生命值由全塔属性中的 poisonDamage 定义。
衰弱怪让勇士衰弱后,攻防会下降一定比例或固定数值(直到衰弱状态解除恢复);由全塔属性中的 weakValue 定义。
诅咒怪将让勇士陷入诅咒状态,诅咒状态下杀怪不获得金币和经验值。
领域怪需要需要给怪物设置 value 代表领域伤害的数值。如果勇士生命值扣减到0则直接死亡触发 lose 事件。
领域是锯齿形状还是正方形由 zoneSquare 设定,如勾选则为正方形,不勾选则为锯齿形状。
领域怪还可以设置range选项代表该领域怪的范围不写则默认为1。
flags.no_zone 设置为 true 可以免疫领域效果。
阻击怪同样需要设置value代表阻击伤害的数值。如果勇士生命值扣减到0则直接死亡触发lose事件。
flags.no_repulse设置为true可以免疫阻击效果包括伤害和移动
!> 阻击怪后退的地点不能有任何事件层图块,否则不会后退。另外它会无视可通行方向,请自行注意悬崖效果的影响!
激光怪同样需要设置value代表激光伤害的数值。
请注意如果吸血、领域、阻击、激光、生命光环中任何两个同时存在,则 value 会冲突。因此请勿将吸血、领域、阻击、激光或生命光环放置在同一个怪物身上。退化和攻防光环、吸血加到自身和光环叠加同理!
flags.no_laser 设置为 true 可以免疫激光效果。将 flags.no_ambush 设置为 true 可以免疫捕捉效果。
退化怪和光环怪需要设置'atkValue'和'defValue'表示退化或增幅的数值也可以不设置默认为0。
flags.no_betweenAttack设置为true可以免疫夹击效果在全塔属性中还有一个系统开关 betweenAttackMax 可以控制夹击伤害是否封顶至夹击怪的战斗伤害。
固伤怪则需要设置damage选项,代表战前扣血数值。

如有额外需求,可参见自定义怪物属性,里面讲了如何设置一个新的怪物属性。

怪物和NPC的朝向问题

从V2.5.2开始对于人形怪物和NPC的朝向问题已经有着比较好的解决方式。

首先明确一点的是和RM不同H5中即使是对同一个怪物/NPC的不同朝向也需要分别将其各个朝向素材追加对应的图片上并进行注册。

怪物的朝向问题

对于同一个怪物的不同朝向,需要对每个朝向创建一个怪物(属性完全相同),这样就可以在地图上绘制不同朝向的怪物。

但是这样会存在一个问题,就是怪物手册中怪物的每个朝向都会显示成一个单独的怪物。

为了避免这种情况的发生,在怪物的属性中存在一个displayIdInBook项,我们可以指定该项来控制每个怪物在怪物手册中中显示成的怪物。

举个例子假设我现在有个怪物其向下的行走图ID是E300其向左的行走图ID是E301向右的行走图ID是E302。分别对这几个怪物填写完全相同的怪物属性。

如果我在地图上同时绘制向下、向左和向右的该怪物,则确实能在地图上显示出来不同的朝向,但是在怪物手册中会同时显示这三种类型的怪物,观感较差。

我们可以给E301E302怪物属性中的displayIdInBook项填写为"E300"

这样的话在怪物手册中所有的E301和E302均会被视为E300并进行合并。即使只有一只朝向左的怪物E301怪物手册仍然会按E300进行显示。
从而完美解决了同种怪物不同朝向在怪物手册的显示问题。此做法不兼容夹击属性,漏怪检测也以映射后的怪物为准。

NPC的朝向问题

和怪物不同的是NPC朝向问题更复杂一点。

在NPC的图块属性中存在一个faceIds的项目可以用其来绑定一个图块所对应的其他朝向的图块ID。

举个例子假设我存在一个NPC其向上的图块ID是N333向下的图块ID是N334向左的图块ID是N335不存在向右的图块ID。

则可以在这几个图块属性中的faceIds中写:{"up": "N333", "down": "N334", "left": "N335"}
当勇士从左边撞上此NPC后将从该图块的图块属性中的 faceIds 中寻求 left 所对应的ID。 如果存在定义如N335则会在触发对话事件前改变当前图块为N335看起来就是在对话前进行了转向面向勇士。
对话中,\t[this] 效果的图像也会尝试选用该NPC的当前朝向朝上不好看会自动改为用朝下的
!> 请注意,在对话结束后朝向不会切换回来,因此如果有必要切换朝向请在事件结束前调用转变图块事件。
从v2.7起也提供了“事件转向”指令来执行这种转变图块从而省去了手动填写ID的不便。
同理使用移动事件让NPC在行走时不同朝向的行走会自动调用faceIds中不同朝向的ID所对应的行走图看起来就是在行走时也可以不断转向了。

从而完美解决了NPC的朝向问题碰触时面向勇士、行走时改变朝向

路障,楼梯,传送门

血网的伤害数值、中毒后每步伤害数值、衰弱时暂时攻防下降的数值都在全塔属性的values内定义。
如果有个性化需求,可以自行修改路障的图块属性 script、脚本编辑“阻激夹域伤害、每步后操作”和公共事件“毒衰咒处理”。
路障同样会尽量被自动寻路绕过目前后三种路障在已主角附加对应debuff的情况下依然会绕过
有关楼梯和传送门,必须在该点的 changeFloor 事件里指定传送点的目标。生成地图
楼层ID指定的是目标楼层的唯一标识符ID也可以在第一个下拉框中选择“前一楼”和“后一楼”。
第二个下拉框可以选择传送到哪个楼梯,或选择三种对称位置,或显式指定坐标(比如目标楼层有多个楼梯时)。
“朝向”为勇士上下楼后面对的方向从V2.7起,支持三种相对转向),不填则不改变。“动画时间”为上下楼的黑屏时间,不填则使用玩家设定值。
“穿透性”表示鼠标或触屏寻路时勇士能否穿过此传送点,在转不开身的狭窄区域建议设为可穿透。
从v2.1.1开始,楼层属性中提供了 upFloordownFloor 两项。如果设置此项(比如"upFloor": [2,3]从V2.7起支持地图选点法设置则写传送到哪个楼梯或者楼传器的落点将用此点来替换楼梯位置即类似于RMXP中的上箭头

剧情文本控制与对话框效果

在写剧情文本时,可以:

  • 使用\t[...]来给文字加上标题和图标。如\t[老人,man]
  • 使用\b[...]来制作对话框效果,如\b[up,3,2]
  • 使用\r[...]来动态修改局部文本的颜色,如\r[red]
  • 使用${}来计算一个表达式的值,如${status:atk+status:def}
  • 使用\f[...]来同时插入一张立绘图,如\f[1.png,100,200]
  • 使用\\i[...]来在对话框中绘制一个图标,如\\i[fly]
  • 使用\\c[...]来修改字体大小,如\\c[16]
  • 使用\\d来加粗或者取消粗体。
  • 使用\\e来加斜体或取消斜体。
  • 使用\\z[...]来添加打字中的暂停效果。

从V2.5.2开始,也允许绘制一张头像图在对话框中,只要通过\t[1.png]\t[标题,1.png]的写法。

使用\\i,\\c,\\d,\\e,\\z时请注意:在事件块中,允许只写一个反斜杠\,系统会自动转义成\\;但是在脚本中必须两个反斜杠都写上!

详细信息请参见剧情文本控制中的说明。

从V2.5.2开始可以用一张WindowSkin图片作为对话框的背景皮肤。
使用时需要将图片放在images目录下并在全塔属性中予以注册。已有的 winskin.png 请勿删除,否则会影响道具商店插件的使用。
可以使用设置剧情文本的属性事件将对话框背景设置为需要的皮肤。

!> 关于对话框效果请注意现在是采用WindowSkin的右下角两个32x32的图片作为对话框尖角进行绘制。因此请尽量使用群文件或网盘的常用素材中给出的WindowSkin素材均已进行对话框适配。如需使用来自第三方的WindowSkin素材请自行注意对话框的尖角问题或弃用\b效果。

另外一点是V2.5.2以后,对话框\b可以根据文字长度来自动控制文本框宽度,其基本控制原理如下:

  • 如果用户存在手动换行\n,则选取最长的一段话作为文本框宽度。
  • 如果用户不存在手动换行则会将文本框宽度调整为X行半的最佳宽度。
  • 文本框宽度存在上下界,最终宽度一定会控制在该范围内。
  • 从V2.7开始,自动换行增加了标点禁则,成对标点的左部不会出现在行尾,右部和不成对标点不会出现在行首。

该自动调整仅对\b的对话框效果有效。非对话框仍然会绘制整个界面的宽度。

大地图

从V2.4开始H5魔塔开始支持大地图。

大地图在创建时可以指定宽高,要求宽和高都不得小于1315x15版本则是不小于15且宽高之积不超过1000
您也可以在楼层属性的最下面修改宽高,还可以指定偏移量。

动画和天气系统

现在我们的H5魔塔支持播放动画也支持天气系统了。
要播放动画你可以先使用“RM动画导出器”将 RPG Maker XP 1.03 的动画导出放在animates目录下然后在全塔属性的animates中定义。

// 在此存放所有可能使用的动画必须是animate格式在这里不写后缀名
// 动画必须放在animates目录下文件名不能使用中文不能带空格或特殊字符
"animates": ["hand", "sword", "zone", "yongchang", "thunder"]

目前不支持用浏览器预览动画Windows系统请使用“动画编辑器”预览然而预览不会播放音效。
!> 动画必须是animate格式名称不能使用中文不能带空格或特殊字符。

导出动画时可能会进行一些压缩譬如把本来是128×128尺寸的动画压缩为64×64播放时再临时放大以节省流量因此清晰度可能不如原版。

从2.3.2开始,动画可以同时导出所用的音效。如果导出音效,请确保将所用到的音效复制到了sounds目录下,并且在全塔属性中注册过。
确切地说,动画文件中记录着第几帧该用什么音效的文件名,您可以用记事本等文本编辑器打开动画文件并手动修改用到的音效文件名(原本可能是中文甚至日文),以和实际的文件名相匹配

动画播放时是按照每秒20帧的速度即50ms/帧)。

定义完毕后,我们可以调用animate事件来播放该动画,有关事件的详细介绍请参见事件

!> 播放录像时,将默认忽略所有动画。
目前天气系统支持雨、雪和雾三种天气。在每层楼的楼层属性中存在一个weather选项表示该层楼的默认天气。

// 该层的默认天气。本项可忽略表示晴天,如果写则第一项为"rain""snow"或"fog"代表雨雪雾第二项为1-10之间的数代表强度。
"weather": ["snow",5] 

我们也可以使用setWeather事件来设置当前天气,有关事件的详细介绍请参见事件

背景音乐

样板支持BGM和SE的播放。要播放音乐和音效你需要将对应的文件放在sounds目录下然后在全塔属性中进行定义

// 在此存放所有的bgm和文件名一致。
// 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好
"bgms": ["bgm.mp3"]

// 在此存放所有的SE和文件名一致
"sounds": ["floor.mp3", "attack.mp3", "door.mp3", "item.mp3", "zone.mp3"]

!> 音频名不能使用中文,不能带空格或特殊字符。
目前BGM支持主流的音乐格式wav, mp3, ogg,不支持 mid 格式的播放。
iOS 系统对 ogg 的支持性较差,但 oggmp3 体积小,请注意权衡。
定义完毕后,我们可以调用playBgm/playSound事件来播放对应的音乐/音效,有关事件的详细介绍请参见事件

另外,考虑到用户的流量问题,将遵循如下规则:

  • 如果用户当前使用的电脑则默认开启音乐效果并播放默认BGM
  • 如果用户当前使用的手机且处于Wifi状态则默认开启音乐效果并播放默认BGM
  • 其他情况,将默认关闭音乐效果,只有在用户在菜单栏中点击“音乐开关”后才会播放音乐

!> iOS平台以及部分浏览器不支持获得当前网络状态此时即使在使用Wifi也必须要用户点击“音乐开关”才能播放音乐。

从V2.5.3开始,可以使用loadBgm事件来预加载一个bgm这样到播放时无需等待直接播放。

同时BGM将使用LRU算法增加缓存机制。默认最多缓存4个BGM在core.js的musicStatus.cachedBgmCount控制
系统会自动释放最久未使用的BGM。也可以使用 freeBgm 事件来手动释放一个无需再用的bgm

录像

HTML5魔塔一大亮点就是存在录像系统可以很方便进行录像回放。

当你在游戏的过程中,随着你的操作,录像也会被依次记录。游戏结束后将提示是否下载录像,上传成绩时也会上传你的录像信息。

在菜单栏-同步存档中,可以直接对当前录像进行下载。

!> 录像记录的是你当前的路线(本质上是模拟键盘操作),是一个纯文本文件,占用空间很小!

录像的回放主要有两种方式:

  1. 保存成的录像文件(.h5route文件):在标题界面点录像回放,再选择文件即可。
  2. 游戏过程中时的当前录像随时按R可以进行回放手机端则可调出虚拟键盘再按R。

录像播放过程中,可以进行如下操作:

  • 步进: 暂停状态下,按 N 键可以单步执行录像,常用于调试。
  • 暂停/播放: 按空格可以随时暂停或播放录像。
  • 加速: 按X可以加速录像播放最高可达6倍速。
  • 减速: 按Z可以减速录像播放最低可达0.3倍速。
  • 停止: 按ESC可以立刻停止录像播放并返回正常游戏。
  • 回退: 按A可以回退到上一个录像节点录像播放过程中每50步存一个录像节点
  • 存档: 按S可以在录像播放过程中进行存档。
  • 查看手册: 按C可以在录像播放过程中查看怪物手册。
  • 浏览地图: 按PgUp/PgDn可以在录像播放过程中浏览地图。

如果录像出现问题,请加 QQ 群 959329661 找小艾反馈Bug。

操作说明

 

 

上面就是整个样板中的各个元件说明。通过这种方式,你就已经可以做出一部没有任何事件的塔了。

尝试着做一个两到三层的塔吧!

==========================================================================================

继续阅读下一章:事件