screenFlash
This commit is contained in:
parent
bda98ad1ea
commit
c7f30538d8
@ -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]);
|
||||
|
||||
@ -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(),
|
||||
|
||||
@ -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"}` 来更改天气。
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
22
libs/ui.js
22
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创建 //////
|
||||
|
||||
@ -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]我是谁?我从哪来?我又要到哪去?",
|
||||
|
||||
@ -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 = " ";
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user