From 515deab7c92fd8f9ed919e39a2d966b06bc0c63e Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Tue, 18 Dec 2018 13:43:00 +0800 Subject: [PATCH] changingFloor --- docs/event.md | 2 +- libs/control.js | 1 - libs/events.js | 14 ++++-------- libs/ui.js | 2 -- project/functions.js | 53 +++++++++++++++++++------------------------- 5 files changed, 28 insertions(+), 44 deletions(-) diff --git a/docs/event.md b/docs/event.md index a17fcc93..cc345ca9 100644 --- a/docs/event.md +++ b/docs/event.md @@ -2199,7 +2199,7 @@ if (core.getFlag("door",0)==2) { core.stopReplay(); core.waitHeroToStop(function() { core.removeGlobalAnimate(0,0,true); - core.clearMap('all'); core.clearMap('curtain'); // 清空全地图 + core.clearMap('all'); // 清空全地图 core.deleteAllCanvas(); core.drawText([ "\t[恭喜通关]你的分数是${status:hp}。" diff --git a/libs/control.js b/libs/control.js index d671933c..db82767b 100644 --- a/libs/control.js +++ b/libs/control.js @@ -287,7 +287,6 @@ control.prototype.showStartAnimate = function (noAnimate, callback) { core.status.played = false; core.clearStatus(); core.clearMap('all'); - core.clearMap('curtain'); core.deleteAllCanvas(); // 重置音量 diff --git a/libs/events.js b/libs/events.js index 0e8e1fcb..b76769f5 100644 --- a/libs/events.js +++ b/libs/events.js @@ -121,7 +121,6 @@ events.prototype.startGame = function (hard, seed, route, callback) { else core.utils.__init_seed(); core.clearMap('all'); - core.clearMap('curtain'); core.deleteAllCanvas(); core.clearStatusBar(); @@ -1464,7 +1463,7 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback core.status.replay.animate=true; core.dom.floorNameLabel.innerHTML = core.status.maps[floorId].title; if (!core.isset(stair) && !core.isset(heroLoc)) - heroLoc = core.status.hero.loc; + heroLoc = core.clone(core.status.hero.loc); if (core.isset(stair)) { if (!core.isset(heroLoc)) heroLoc={}; @@ -1487,6 +1486,8 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback heroLoc.y=core.status.hero.loc.y; } } + if (!core.isset(heroLoc.direction)) heroLoc.direction = core.status.hero.loc.direction; + if (core.status.maps[floorId].canFlyTo && core.status.hero.flyRange.indexOf(floorId)<0) { core.status.hero.flyRange.push(floorId); core.status.hero.flyRange.sort(function (a, b) { @@ -1498,14 +1499,7 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback var changing = function () { - core.events.eventdata.changingFloor(floorId, fromLoad); - - if (core.isset(heroLoc.direction)) - core.setHeroLoc('direction', heroLoc.direction); - core.setHeroLoc('x', heroLoc.x); - core.setHeroLoc('y', heroLoc.y); - core.clearMap('hero'); - core.drawHero(); + core.events.eventdata.changingFloor(floorId, heroLoc, fromLoad); var changed = function () { core.unLockControl(); diff --git a/libs/ui.js b/libs/ui.js index 575dbf24..19f47092 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -29,8 +29,6 @@ ui.prototype.getContextByName = function (name) { ui.prototype.clearMap = function (name, x, y, width, height) { if (name == 'all') { for (var m in core.canvas) { - // 不擦除curtain层 - if (m=='curtain') continue; core.canvas[m].clearRect(0, 0, core.bigmap.width*32, core.bigmap.height*32); } core.dom.gif.innerHTML = ""; diff --git a/project/functions.js b/project/functions.js index ce3d9bfc..4d4a98fd 100644 --- a/project/functions.js +++ b/project/functions.js @@ -59,8 +59,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = core.stopReplay(); core.waitHeroToStop(function() { core.removeGlobalAnimate(0,0,true); - core.clearMap('all'); core.clearMap('curtain'); // 清空全地图 - core.deleteAllCanvas(); + core.clearMap('all'); // 清空全地图 + core.deleteAllCanvas(); // 删除所有创建的画布 // 请注意: // 成绩统计时是按照hp进行上传并排名,因此光在这里改${status:hp}是无效的 // 如需按照其他的的分数统计方式,请先将hp设置为你的得分 @@ -85,9 +85,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = }); }) }, - "changingFloor": function (floorId, fromLoad) { + "changingFloor": function (floorId, heroLoc, fromLoad) { // 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻 - // floorId为要切换到的楼层ID;fromLoad表示是否是从读档造成的切换 + // floorId为要切换到的楼层ID;heroLoc表示勇士切换到的位置;fromLoad表示是否是从读档造成的切换 // ---------- 此时还没有进行切换,当前floorId还是原来的 ---------- // var currentId = core.status.floorId || null; // 获得当前的floorId,可能为null @@ -96,10 +96,23 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // core.deleteAllCanvas(); // } - // 设置新楼层名 - core.events.setFloorName(floorId); // 重置画布尺寸 core.maps.resizeMap(floorId); + // 检查重生怪并重置 + if (!fromLoad) { + core.status.maps[floorId].blocks.forEach(function(block) { + if (block.disable && core.isset(block.event) && block.event.cls.indexOf('enemy')==0 && + core.enemys.hasSpecial(core.material.enemys[block.event.id].special, 23)) { + block.disable = false; + } + }); + } + // 设置勇士的位置 + core.status.hero.loc = heroLoc; + + // ---------- 重绘新地图;这一步将会设置core.status.floorId ---------- // + core.drawMap(floorId); + // 切换楼层BGM if (core.isset(core.status.maps[floorId].bgm)) { var bgm = core.status.maps[floorId].bgm; @@ -111,11 +124,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = if (!core.isset(color) && core.isset(core.status.maps[floorId].color)) color = core.status.maps[floorId].color; if (core.isset(color)) { - core.clearMap('curtain'); core.fillRect('curtain',0,0,416,416,core.arrayToRGBA(color)); core.status.curtainColor = color; } - else core.clearMap('curtain'); // 更改天气 var weather = core.getFlag('__weather__', null); if (!core.isset(weather) && core.isset(core.status.maps[floorId].weather)) @@ -123,22 +134,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = if (core.isset(weather)) core.setWeather(weather[0], weather[1]); else core.setWeather(); - // 清除动图 - core.dom.gif.innerHTML = ''; - - // 检查重生怪并重置 - if (!fromLoad) { - core.status.maps[floorId].blocks.forEach(function(block) { - if (block.disable && core.isset(block.event) && block.event.cls.indexOf('enemy')==0 && - core.enemys.hasSpecial(core.material.enemys[block.event.id].special, 23)) { - block.disable = false; - } - }); - } - - // ---------- 绘制地图;这一步将会设置core.status.floorId ---------- // - core.drawMap(floorId); - + + // ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等 + }, "afterChangeFloor": function (floorId, fromLoad) { // 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行 @@ -1169,14 +1167,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = }, "drawAbout": function() { // 绘制“关于”界面 - if (!core.isPlaying()) { - core.status.event = {'id': null, 'data': null}; - core.dom.startPanel.style.display = 'none'; - } - core.lockControl(); + core.ui.closePanel(); core.status.event.id = 'about'; - core.clearLastEvent(); var left = 48, top = 36, right = 416 - 2 * left, bottom = 416 - 2 * top; core.setAlpha('ui', 0.85);