mota-js/docs/element.md
2017-12-31 22:23:44 +08:00

11 KiB
Raw Blame History

元件说明

?> 上次更新时间:* {docsify-updated} *

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

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

生成地图

道具

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

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

!> 请注意,本塔没有"装备"的说法,所有剑盾拿到后将立刻作为攻防数值直接加到勇士的属性上。

拿到道具后将触发afterGetItem事件,有关事件的详细介绍请参见事件

如需修改某个道具的效果,在不同区域宝石数据发生变化等问题,请参见自定义道具效果的说明。

有关轻按在data.js的系统变量中有定义。如果enableGentleClick为true则鼠标触摸屏通过双击勇士键盘通过空格可达到轻按效果即不向前移动而获得前方物品。

本塔支持6种门黄蓝红绿铁花。前五种门需要有对应的钥匙打开花门只能通过调用openDoor事件进行打开。

本塔支持暗墙,但是暗墙也必须通过openDoor事件开启。例如样板2层的小偷事件就是可以打开一个暗墙的。

开门后可触发该层的afterOpenDoor事件,有关事件的详细介绍请参见第四章。

怪物

本塔支持的怪物列表参见enemys.js。其与images目录下的enemys.png素材按顺序一一对应。如不知道怪物素材长啥样的请打开enemys.png对比查看。 如有自己的怪物素材需求请参见自定义素材的内容。

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

怪物的特殊属性所对应的数字special在下面的getSpecialText中定义,请勿对已有的属性进行修改。

enemys.prototype.getSpecialText = function (enemyId) {
    if (enemyId == undefined) return "";
    var enemy = this.enemys[enemyId];
    var special = enemy.special;
    var text = [];
    if (this.hasSpecial(special, 1)) text.push("先攻");
    if (this.hasSpecial(special, 2)) text.push("魔攻");
    if (this.hasSpecial(special, 3)) text.push("坚固");
    if (this.hasSpecial(special, 4)) text.push("2连击");
    if (this.hasSpecial(special, 5)) text.push("3连击");
    if (this.hasSpecial(special, 6)) text.push((enemy.n||4)+"连击");
    if (this.hasSpecial(special, 7)) text.push("破甲");
    if (this.hasSpecial(special, 8)) text.push("反击");
    if (this.hasSpecial(special, 9)) text.push("净化");
    if (this.hasSpecial(special, 10)) text.push("模仿");
    if (this.hasSpecial(special, 11)) text.push("吸血");
    if (this.hasSpecial(special, 12)) text.push("中毒");
    if (this.hasSpecial(special, 13)) text.push("衰弱");
    if (this.hasSpecial(special, 14)) text.push("诅咒");
    if (this.hasSpecial(special, 15)) text.push("领域");
    if (this.hasSpecial(special, 16)) text.push("夹击");
    if (this.hasSpecial(special, 17)) text.push("仇恨");
    if (this.hasSpecial(special, 18)) text.push("阻击");
    if (this.hasSpecial(special, 19)) text.push("自爆");
    if (this.hasSpecial(special, 20)) text.push("无敌");
    return text.join("  ");
}

多属性可采用数组的写法,比如'special': [1,3]视为同时拥有先攻和坚固属性;'special': [5,10,14,18]视为拥有3连击、魔防、诅咒、阻击四个属性。

本塔支持战斗动画,在data.js中存在三个全局选项:canOpenBattleAnimate, showBattleAnimateConfirm, battleAnimate

  • canOpenBattleAnimate代表是否允许用户开启战斗动画。如果你添加了一些自定义属性且不想修改战斗界面的UI则可以将其关闭。
  • showBattleAnimateConfirm代表是否在游戏开始时给用户提供开启动画的选项。对于一些偏向于萌新的塔,可以开启此项。
  • battleAnimate代表是否默认开启战斗动画。此项会被用户存储的设置给覆盖。
  • 如果canOpenBattleAnimate为false则后面两个也强制为false。

怪物可以负伤,在data.js的全局变量enableNegativeDamage中指定。

下面的getSpecialHint函数则给定了每个特殊属性的详细描述。这个描述将在怪物手册中看到。

打败怪物后可以进行加点操作。有关加点塔的制作可参见加点事件

如果data.js中的enableExperience为false即不启用经验的话怪物手册里将不显示怪物的经验值打败怪物也不获得任何经验。

拿到幸运金币后,打怪获得的金币将翻倍。

N连击怪物的special是6且我们可以为它定义n代表实际连击数。参见样板中剑王的写法。

N连击

吸血怪需要在怪物后添加value代表吸血的比例。

怪物吸血

中毒怪让勇士中毒后,每步扣减的生命值由data.js中的values定义。

衰弱怪让勇士衰弱后,攻防会暂时下降一定的数值(直到衰弱状态解除恢复);这个下降的数值同在data.js中的values定义。

debuff

诅咒怪将让勇士陷入诅咒状态,诅咒状态下杀怪不获得金币和经验值。

领域怪需要在怪物后添加value代表领域伤害的数值。如果勇士生命值扣减到0则直接死亡触发lose事件。

领域是十字伤害还是九宫格伤害由data.js中的全局变量zoneSquare设定。你也可以对该怪物自行进行设定。

range选项可选代表该领域怪的范围不写则默认为1。

怪物领域

阻击怪同样需要在怪物后添加value代表领域伤害的数值。如果勇士生命值扣减到0则直接死亡触发lose事件。

!> 阻击怪后退的地点不能有任何事件存在,即使是已经被禁用的自定义事件!

请注意如果吸血、领域、阻击中任何两个同时存在则value会冲突。因此请勿将吸血、领域或阻击放置在同一个怪物身上。

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

路障、楼梯、传送门

血网的伤害数值、中毒后每步伤害数值、衰弱时暂时攻防下降的数值,都在 data.js 的values内定义。

路障同样会尽量被自动寻路绕过。

有关楼梯和传送门必须在该层样板的changeFloor里指定传送点的目标。

楼层转换

!> 请注意这里的"x,y"代表该点的横坐标为x纵坐标为y即从左到右第x列从上到下的第y行从0开始计算。如(6,0)代表最上面一行的正中间一列。

floorId指定的是目标楼层的唯一标识符ID

后面可以写stair到upFloor或downFloor表示将前往目标楼层的上楼梯/下楼梯位置。你也可以写loc然后指定目标点的坐标。

请注意的是如果目标楼层有多个楼梯写stair可能会导致到达的楼梯不确定这时候请使用loc方式来指定具体的点位置。

可以指定direction为up/left/right/down指定后勇士将面向该方向。

可以指定time指定后切换动画时长为指定的数值。

楼梯和传送门默认可"穿透"。所谓穿透,就是当寻路穿过一个楼梯/传送门后不会触发楼层传送事件而是继续前进。通过系统Flag可以指定是否穿透你也可以对每个传送点单独设置该项。

楼层转换穿透

背景音乐

本塔支持BGM和SE的播放。

要播放音乐和音效你需要将对应的文件放在sounds目录下然后在main.js中进行定义

this.bgms = [ // 在此存放所有的bgm和文件名一致。第一项为默认播放项
    // 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好
    '058-Slow01.mid', 'bgm.mp3', 'qianjin.mid', 'star.mid'
];
this.sounds = [ // 在此存放所有的SE和文件名一致
    // 音频名不能使用中文,不能带空格或特殊字符;可以直接改名拼音就好
    'floor.mp3', 'attack.ogg', 'door.ogg', 'item.ogg'
]

!> 音频名不能使用中文,不能带空格或特殊字符。

目前BGM支持主流的音乐格式如mp3, ogg, mid格式等。SE则不支持mid格式的播放。

!> mid格式是通过数学方法模拟出来的音乐效果质量可能会和实际效果差距较大。

定义完毕后,我们可以调用playBgm/playSound事件来播放对应的音乐/音效,有关事件的详细介绍请参见事件

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

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

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

操作说明

本塔主要支持鼠标(触摸屏)操作和键盘操作。

鼠标(触摸屏)操作说明如下:

  • 点状态栏中图标: 进行对应的操作
  • 点任意块: 寻路并移动
  • 点任意块并拖动: 指定寻路路线
  • 单击勇士: 转向
  • 双击勇士: 轻按(仅在轻按开关打开时有效)

键盘操作快捷键如下:

  • [CTRL] 跳过对话
  • [X] 打开/关闭怪物手册
  • [G] 打开/关闭楼层传送器
  • [S/D] 打开/关闭存/读档页面
  • [K] 打开/关闭快捷商店选择列表
  • [T] 打开/关闭工具栏
  • [ESC] 打开/关闭系统菜单
  • [H] 打开帮助页面
  • [SPACE] 轻按(仅在轻按开关打开时有效)
  • [1] 快捷使用破墙镐
  • [2] 快捷使用炸弹/圣锤
  • [3] 快捷使用中心对称飞行器

以上快捷键也能在游戏菜单中的操作说明中看到。

 

 

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

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

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

继续阅读下一章:事件