diff --git a/README.md b/README.md index 66369b8a..f559d374 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,7 @@ HTML5 canvas制作的魔塔样板,支持全平台游戏! * [x] 改变图块(setBlock事件)。 * [x] 同一个点的多事件处理(做法详见文档)。 +* [x] 现在可以支持滑冰和推箱子事件了。 * [x] 地图中每个块的可通行方向控制(悬崖效果)。 * [x] 动画支持带旋转和翻转的帧。 * [x] 现在可以允许用户丢弃道具了(例如不会再使用的装备)。 diff --git a/docs/event.md b/docs/event.md index 296357f9..77a1e39e 100644 --- a/docs/event.md +++ b/docs/event.md @@ -1197,6 +1197,51 @@ events.prototype.afterUseBomb = function () { } ``` +## 滑冰和推箱子事件 + +最新的样板还支持滑冰和推箱子事件。 + +滑冰事件的数字是167,trigger为ski。 + +当角色走上冰面时,将触发ski事件,并会一直向前滑行,直到撞上不可通行的块会触发事件(比如撞上怪物会触发battle,撞上门会触发openDoor等等),或者离开冰面为止。 + +!> 由于H5魔塔只有事件一层,因此滑冰的冰面上将无法摆放任何东西(如道具)。 + +!> 撞上怪物将触发battle进行战斗,此战斗的触发和直接撞上怪物相同(战斗前自动存档,打不过则无法战斗);如需不自动存档的强制战斗请使用自定义事件覆盖。开门同理。 + +关于推箱子,存在三种状态:花(168),箱子(169)和已经推到花的箱子(170)。 + +!> 推箱子的前方不允许存在任何事件(花除外),包括已经禁用的自定义事件。 + +推完箱子后将触发events.js中的afterPushBox事件,你可以在这里进行开门判断。 + +``` js +////// 推箱子后的事件 ////// +events.prototype.afterPushBox = function () { + + var noBoxLeft = function () { + // 地图上是否还存在未推到的箱子,如果不存在则返回true,存在则返回false + for (var i=0;i=12||ny<0||ny>=12) return; + + var block = core.getBlock(nx, ny, null, false); + if (block!=null && !(core.isset(block.block.event) && block.block.event.id=='flower')) + return; + + var blockIcon; + if (block==null) { + core.status.thisMap.blocks.push(core.maps.getBlock(nx, ny, 169)); + blockIcon=core.material.icons.terrains.box; + } + else { + block.block.id=170; + block.block.event=core.maps.getBlock(null,null,170).event; + blockIcon=core.material.icons.terrains.boxed; + } + core.canvas.event.clearRect(nx * 32, ny * 32, 32, 32); + core.canvas.event.drawImage(core.material.images.terrains, 0, blockIcon * 32, 32, 32, nx * 32, ny * 32, 32, 32); + + if (data.event.id=='box') { + core.removeBlock(data.x, data.y); + } + else { + data.id=168; + data.event=core.maps.getBlock(null,null,168).event; + core.canvas.event.clearRect(data.x * 32, data.y * 32, 32, 32); + core.canvas.event.drawImage(core.material.images.terrains, 0, core.material.icons.terrains.flower * 32, 32, 32, data.x * 32, data.y * 32, 32, 32); + } + + core.updateStatusBar(); + core.lockControl(); + core.eventMoveHero([direction], null, function () { + core.unLockControl(); + core.events.afterPushBox(); + core.replay(); + }) + +} + +////// 推箱子后的事件 ////// +events.prototype.afterPushBox = function () { + + var noBoxLeft = function () { + // 地图上是否还存在未推到的箱子,如果不存在则返回true,存在则返回false + for (var i=0;i