diff --git a/_server/blockly/MotaAction.g4 b/_server/blockly/MotaAction.g4 index b72170e4..93b9c7b1 100644 --- a/_server/blockly/MotaAction.g4 +++ b/_server/blockly/MotaAction.g4 @@ -270,6 +270,7 @@ action | showGif_1_s | setFg_0_s | setFg_1_s + | screenFlash_s | setWeather_s | move_s | moveHero_s @@ -1155,6 +1156,28 @@ var code = '{"type": "setFg"'+Int_0 +async+'},\n'; return code; */; +screenFlash_s + : '画面闪烁' Number ',' Number ',' Number '强度' Number '动画时间' Int '不等待执行完毕' Bool Newline + +/* screenFlash_s +tooltip : screenFlash: 更改画面色调,动画时间可不填 +helpUrl : https://h5mota.com/games/template/docs/#/event?id=screenFlash%EF%BC%9A%E7%94%BB%E9%9D%A2%E9%97%AA%E7%83%81 +default : [255,255,255,100,500,false] +colour : this.soundColor +var limit = function(v,min,max) { + if(v>max) return max; + if(v=steps) { + if (step <= 0) { delete core.animateFrame.asyncId[changeAnimate]; clearInterval(changeAnimate); core.status.curtainColor = color; diff --git a/libs/core.js b/libs/core.js index 079c52b0..e972c986 100644 --- a/libs/core.js +++ b/libs/core.js @@ -908,6 +908,11 @@ core.prototype.setFg = function(color, time, callback) { core.control.setFg(color, time, callback); } +////// 画面闪烁 ////// +core.prototype.screenFlash = function (color, intensity, time, callback) { + core.ui.screenFlash(color, intensity, time, callback); +} + ////// 更新全地图显伤 ////// core.prototype.updateDamage = function () { core.control.updateDamage(); diff --git a/libs/events.js b/libs/events.js index 64d083aa..80475de6 100644 --- a/libs/events.js +++ b/libs/events.js @@ -822,6 +822,17 @@ events.prototype.doAction = function() { }); } break; + case "screenFlash": // 画面闪烁 + if (data.async) { + core.screenFlash(data.color, data.intensity, data.time); + this.doAction(); + } + else { + core.screenFlash(data.color, data.intensity, data.time, function() { + core.events.doAction(); + }); + } + break; case "setWeather": // 更改天气 core.setWeather(data.name, data.level); if (core.isset(data.name)) @@ -845,8 +856,6 @@ events.prototype.doAction = function() { this.doAction(); } break; - this.doAction(); - break; } case "openShop": // 打开一个全局商店 if (core.status.replay.replaying) { // 正在播放录像,简单将visited置为true diff --git a/libs/ui.js b/libs/ui.js index 7a632dc9..14e35566 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -2769,6 +2769,28 @@ ui.prototype.drawHelp = function () { ]); } +////// 画面闪烁 ////// +ui.prototype.screenFlash = function (color, intensity, time, callback) { + core.ui.createCanvas("screenFlash", 0, 0, 416, 416, 155); + core.dymCanvas.screenFlash.fillStyle = core.arrayToRGB(color); + core.dymCanvas.screenFlash.fillRect(0, 0, 416, 416); + core.dymCanvas.screenFlash.canvas.style.opacity = intensity / 100; + var per_time = 10, step = parseInt(time/per_time); + var changeAnimate = setInterval(function(){ + core.dymCanvas.screenFlash.canvas.style.opacity *= (step-1)/step; + step--; + if (step <= 0) { + clearInterval(changeAnimate); + core.ui.deleteCanvas("screenFlash"); + delete core.animateFrame.asyncId[changeAnimate]; + // core.status.replay.animate=false; + if (core.isset(callback)) callback(); + } + }, per_time); + + core.animateFrame.asyncId[changeAnimate] = true; +} + ////// 动态canvas ////// ////// canvas创建 ////// diff --git a/project/floors/sample0.js b/project/floors/sample0.js index 06e8c93a..c08187bb 100644 --- a/project/floors/sample0.js +++ b/project/floors/sample0.js @@ -27,7 +27,8 @@ main.floors.sample0= "firstArrive": [ { "type": "setText", - "background": "winskin.png" + "background": "winskin.png", + "time": 0 }, "\t[样板提示]首次到达某层可以触发 firstArrive 事件,该事件可类似于RMXP中的“自动执行脚本”。\n\n本事件支持一切的事件类型,常常用来触发对话,例如:", "\t[hero]\b[up,hero]我是谁?我从哪来?我又要到哪去?", diff --git a/project/functions.js b/project/functions.js index ecf7e223..81c672f6 100644 --- a/project/functions.js +++ b/project/functions.js @@ -688,7 +688,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = case 83: // S:存档 core.save(true); break; - case 68: // D:独挡 + case 68: // D:读档 core.load(true); break; case 69: // E:打开光标 @@ -903,9 +903,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = if (core.flags.enableLevelUp && core.status.hero.lv