screenFlash

This commit is contained in:
tocque 2018-12-19 16:36:42 +09:00
parent bda98ad1ea
commit c7f30538d8
9 changed files with 101 additions and 16 deletions

View File

@ -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<min) return min;
return v;
}
Number_0 = limit(Number_0,0,255);
Number_1 = limit(Number_1,0,255);
Number_2 = limit(Number_2,0,255);
Number_3 = limit(Number_3,0,100);
var async = Bool_0?', "async": true':'';
var code = '{"type": "screenFlash", "color": ['+Number_0+','+Number_1+','+Number_2+'], "intensity": '+Number_3+', "time": '+Int_0 +async+'},\n';
return code;
*/;
setWeather_s
: '更改天气' Weather_List '强度' Int Newline
@ -2140,6 +2163,10 @@ ActionParser.prototype.parseAction = function() {
data.time||0,data.async||false,this.next]);
}
break;
case "screenFlash": // 画面闪烁
this.next = MotaActionBlocks['screenFlash_s'].xmlText([
data.color[0],data.color[1],data.color[2],data.intensity||100,data.time||500,data.async||false,this.next]);
break;
case "setWeather": // 更改天气
this.next = MotaActionBlocks['setWeather_s'].xmlText([
data.name||'无',data.level||1,this.next]);

View File

@ -140,6 +140,7 @@ editor_blockly = function () {
MotaActionBlocks['hideStatusBar_s'].xmlText(),
MotaActionBlocks['setFg_0_s'].xmlText(),
MotaActionBlocks['setFg_1_s'].xmlText(),
MotaActionBlocks['screenFlash_s'].xmlText(),
MotaActionBlocks['setWeather_s'].xmlText(),
MotaActionBlocks['playBgm_s'].xmlText(),
MotaActionBlocks['pauseBgm_s'].xmlText(),

View File

@ -1061,6 +1061,25 @@ time为可选的如果指定则会作为更改画面色调的时间。
async可选如果为true则会异步执行即不等待当前事件执行完毕立刻执行下一个事件
### screenFlash画面闪烁
我们可以使用 `{"type": "screenFlash"}` 来进行画面闪烁。
``` js
"x,y": [ // 实际执行的事件列表
{"type": "screenFlash", "color": [255,255,255], "intensity": 60, "time": 500}, // 闪光为白色强度为60动画时间1000毫秒
{"type": "screenFlash", "color": [255,0,0], "intensity": 100, "time": 100,"async": true}, // 闪光为红色强度最大动画时间100毫秒且异步执行
]
```
color为闪光的颜色。它是一个数组分别指定目标颜色的R,G,B值。
- 常见RGB颜色 纯黑[0,0,0],纯白[255,255,255],纯红[255,0,0],等等。
intensity为强度即闪光的不透明度为一个0到100之间的数值越高闪烁效果越强。默认为100
time为闪烁时间默认值为500
async可选如果为true则会异步执行即不等待当前事件执行完毕立刻执行下一个事件
### setWeather更改天气
我们可以使用 `{"type": "setWeather"}` 来更改天气。

View File

@ -1337,7 +1337,7 @@ control.prototype.setFg = function(color, time, callback) {
core.status.curtainColor = [0,0,0,0];
}
var fromColor = core.status.curtainColor;
var nowColor = core.status.curtainColor;
if (!core.isset(color))
color = [0,0,0,0];
@ -1353,19 +1353,20 @@ control.prototype.setFg = function(color, time, callback) {
return;
}
var per_time = 10, step=0, steps = parseInt(time / per_time);
var per_time = 10, step = parseInt(time / per_time);
var changeAnimate = setInterval(function() {
step++;
var nowA = fromColor[3]+(color[3]-fromColor[3])*step/steps;
var nowR = parseInt(fromColor[0]+(color[0]-fromColor[0])*step/steps);
var nowG = parseInt(fromColor[1]+(color[1]-fromColor[1])*step/steps);
var nowB = parseInt(fromColor[2]+(color[2]-fromColor[2])*step/steps);
nowColor = [
parseInt(nowColor[0]*(step-1)+color[0])/step,
parseInt(nowColor[1]*(step-1)+color[1])/step,
parseInt(nowColor[2]*(step-1)+color[2])/step,
(nowColor[3]*(step-1)+color[3])/step,
];
core.clearMap('curtain');
core.fillRect('curtain', 0, 0, 416, 416, core.arrayToRGBA([nowR,nowG,nowB,nowA]));
core.fillRect('curtain', 0, 0, 416, 416, core.arrayToRGBA(nowColor));
step--;
if (step>=steps) {
if (step <= 0) {
delete core.animateFrame.asyncId[changeAnimate];
clearInterval(changeAnimate);
core.status.curtainColor = color;

View File

@ -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();

View File

@ -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

View File

@ -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创建 //////

View File

@ -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]我是谁?我从哪来?我又要到哪去?",

View File

@ -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<core.firstData.levelUp.length) {
var need = core.calValue(core.firstData.levelUp[core.status.hero.lv].need);
if (core.flags.levelUpLeftMode)
core.statusBar.up.innerHTML = (need - core.getStatus('experience')) || " ";
core.statusBar.up.innerHTML = core.formatBigNumber(need - core.getStatus('experience')) || " ";
else
core.statusBar.up.innerHTML = need || " ";
core.statusBar.up.innerHTML = core.formatBigNumber(need) || " ";
}
else core.statusBar.up.innerHTML = " ";