帧动画初步实现
This commit is contained in:
parent
30b1731ebc
commit
d818ff36ff
@ -954,6 +954,7 @@ action
|
|||||||
| removeMouse_s
|
| removeMouse_s
|
||||||
| drawWarning_s
|
| drawWarning_s
|
||||||
| addPop_s
|
| addPop_s
|
||||||
|
| animationDrawable_s
|
||||||
| over_s
|
| over_s
|
||||||
| overlist_s
|
| overlist_s
|
||||||
| playStereo_s
|
| playStereo_s
|
||||||
@ -2475,6 +2476,91 @@ var code = '{"type": "scaleImage", "code": '+NInt_0+loc+', "scale": '+Number_0+M
|
|||||||
return code;
|
return code;
|
||||||
*/;
|
*/;
|
||||||
|
|
||||||
|
animationDrawable_s
|
||||||
|
: '帧动画' '总显示帧数' IntString '底色' ColorString? Colour '底色透明度' Number BGNL?Newline
|
||||||
|
'图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline
|
||||||
|
'(剪裁区域不填写为全图,绘制区域不填写为全画面)'BGNL?Newline
|
||||||
|
animationDrawableimage+? Newline
|
||||||
|
'音频序列(到达对应帧进行播放)'BGNL?Newline
|
||||||
|
animationDrawablesound+? Newline
|
||||||
|
|
||||||
|
|
||||||
|
/* animationDrawable_s
|
||||||
|
tooltip : animationDrawable:帧动画图片叠加
|
||||||
|
helpUrl : /_docs/#/instruction
|
||||||
|
default : [30,"",'rgb(0, 0, 0)',1]
|
||||||
|
allImages : ['EvalString_0']
|
||||||
|
colour : this.imageColor
|
||||||
|
if (Number_0 < 0||Number_0>1) throw new Error('透明度范围为0-1,不填默认为1,0为透明,1为不透明')
|
||||||
|
|
||||||
|
ColorString_0 = ColorString_0 ? (', "color": ['+ColorString_0+']') : '';
|
||||||
|
Number_0 = Number_0 ? (', "globalAlpha": '+Number_0+'') : '';
|
||||||
|
var imageList=animationDrawableimage_0?',"imageList": [\n'+animationDrawableimage_0.slice(0,-1)+'\n]':''
|
||||||
|
var soundList=animationDrawablesound_0?',"soundList": [\n'+animationDrawablesound_0.slice(0,-1)+'\n]':''
|
||||||
|
var code = '{"type": "animationDrawable", "allFarme": '+IntString_0+ColorString_0+Number_0+imageList+soundList+'},\n';
|
||||||
|
return code;
|
||||||
|
*/;
|
||||||
|
|
||||||
|
animationDrawableList
|
||||||
|
: animationDrawableimage
|
||||||
|
| animationDrawablesound
|
||||||
|
| animationDrawabletextEmpty;
|
||||||
|
|
||||||
|
animationDrawableimage
|
||||||
|
: '图片' EvalString? '起始帧' IntString? '起始透明度' Number BGNL? Newline
|
||||||
|
'剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString? BGNL? Newline
|
||||||
|
'结束帧' IntString? '结束透明度' Number '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString? Newline
|
||||||
|
/* animationDrawableimage
|
||||||
|
tooltip : 帧动画图片列表
|
||||||
|
helpUrl : /_docs/#/instruction
|
||||||
|
default : ["","",1,"","","","","","","","","",1,"","","","","","","",""]
|
||||||
|
colour : this.subColor
|
||||||
|
allImages : ['EvalString_0']
|
||||||
|
if ((Number_0 < 0||Number_0>1)&&!Number_0||(Number_1 < 0||Number_1>1)&&!Number_1) throw new Error('透明度范围为0-1,不填默认为1')
|
||||||
|
IntString_0 = IntString_0 ? (', "beforefarme": '+IntString_0+'') : '';
|
||||||
|
IntString_1 = IntString_1 ? (', "cx": '+IntString_1+'') : '';
|
||||||
|
IntString_2 = IntString_2 ? (', "cy": '+IntString_2+'') : '';
|
||||||
|
IntString_3 = IntString_3 ? (', "cw": '+IntString_3+'') : '';
|
||||||
|
IntString_4 = IntString_4 ? (', "ch": '+IntString_4+'') : '';
|
||||||
|
IntString_5 = IntString_5 ? (', "x": '+IntString_5+'') : '';
|
||||||
|
IntString_6 = IntString_6 ? (', "y": '+IntString_6+'') : '';
|
||||||
|
IntString_7 = IntString_7 ? (', "w": '+IntString_7+'') : '';
|
||||||
|
IntString_8 = IntString_8 ? (', "h": '+IntString_8+'') : '';
|
||||||
|
Number_0 = Number_0 ? (', "globalAlpha": '+Number_0+'') : '';
|
||||||
|
IntString_9 = IntString_9 ? (', "afterfarme": '+IntString_9+'') : '';
|
||||||
|
IntString_10 = IntString_10 ? (', "acx": '+IntString_10+'') : '';
|
||||||
|
IntString_11 = IntString_11 ? (', "acy": '+IntString_11+'') : '';
|
||||||
|
IntString_12 = IntString_12 ? (', "acw": '+IntString_12+'') : '';
|
||||||
|
IntString_13 = IntString_13 ? (', "ach": '+IntString_13+'') : '';
|
||||||
|
IntString_14 = IntString_14 ? (', "ax": '+IntString_14+'') : '';
|
||||||
|
IntString_15 = IntString_15 ? (', "ay": '+IntString_15+'') : '';
|
||||||
|
IntString_16 = IntString_16 ? (', "aw": '+IntString_16+'') : '';
|
||||||
|
IntString_17 = IntString_17 ? (', "ah": '+IntString_17+'') : '';
|
||||||
|
Number_1 = Number_1 ? (', "aglobalAlpha": '+Number_1+'') : '';
|
||||||
|
return '{ "image":"'+EvalString_0+'"'+IntString_0+IntString_1+IntString_2+IntString_3+IntString_4+IntString_5+IntString_6+IntString_7+IntString_8+Number_0+IntString_9+IntString_10+IntString_11+IntString_12+IntString_13+IntString_14+IntString_15+IntString_16+IntString_17+Number_1+'},'
|
||||||
|
*/;
|
||||||
|
|
||||||
|
animationDrawablesound
|
||||||
|
: '音效' EvalString? '起始帧' IntString '是否停止其他音效'Bool? Newline
|
||||||
|
|
||||||
|
/* animationDrawablesound
|
||||||
|
tooltip : 帧动画配音
|
||||||
|
helpUrl : /_docs/#/instruction
|
||||||
|
default : ["",0,false]
|
||||||
|
colour : this.subColor
|
||||||
|
allSounds : ['EvalString_0']
|
||||||
|
|
||||||
|
return '{ "sound":"'+EvalString_0+'","startfarme":'+IntString_0+',"stopbefore":'+Bool_0+'},'
|
||||||
|
*/;
|
||||||
|
|
||||||
|
animationDrawabletextEmpty
|
||||||
|
: Newline
|
||||||
|
|
||||||
|
/* animationDrawabletextEmpty
|
||||||
|
var code = [];
|
||||||
|
return code;
|
||||||
|
*/;
|
||||||
|
|
||||||
setCurtain_0_s
|
setCurtain_0_s
|
||||||
: '更改画面色调' ColorString Colour '动画时间' IntString? BGNL? Newline '渐变方式' MoveMode_List '持续到下一个本事件' Bool '不等待执行完毕' Bool Newline
|
: '更改画面色调' ColorString Colour '动画时间' IntString? BGNL? Newline '渐变方式' MoveMode_List '持续到下一个本事件' Bool '不等待执行完毕' Bool Newline
|
||||||
|
|
||||||
|
@ -703,6 +703,61 @@ MotaActionParser = function () {
|
|||||||
this.next,
|
this.next,
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
case "animationDrawable":
|
||||||
|
var buildanimationDrawableimage = function (obj) {
|
||||||
|
obj = MotaActionFunctions.processanimationDrawableimage(obj || []);
|
||||||
|
var res = null;
|
||||||
|
for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
|
||||||
|
res = MotaActionBlocks["animationDrawableimage"].xmlText([
|
||||||
|
one[0],
|
||||||
|
one[1],
|
||||||
|
one[2],
|
||||||
|
one[3],
|
||||||
|
one[4],
|
||||||
|
one[5],
|
||||||
|
one[6],
|
||||||
|
one[7],
|
||||||
|
one[8],
|
||||||
|
one[9],
|
||||||
|
one[10],
|
||||||
|
one[11],
|
||||||
|
one[12],
|
||||||
|
one[13],
|
||||||
|
one[14],
|
||||||
|
one[15],
|
||||||
|
one[16],
|
||||||
|
one[17],
|
||||||
|
one[18],
|
||||||
|
one[19],
|
||||||
|
one[20],
|
||||||
|
res,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
var buildanimationDrawablesound = function (obj) {
|
||||||
|
obj = MotaActionFunctions.processanimationDrawablesound(obj || []);
|
||||||
|
var res = null;
|
||||||
|
for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
|
||||||
|
res = MotaActionBlocks["animationDrawablesound"].xmlText([
|
||||||
|
one[0],
|
||||||
|
one[1],
|
||||||
|
one[2],
|
||||||
|
res,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
};
|
||||||
|
this.next = MotaActionBlocks["animationDrawable_s"].xmlText([
|
||||||
|
data.allFarme,
|
||||||
|
data.color,
|
||||||
|
"rgba(" + data.color + ")",
|
||||||
|
data.globalAlpha,
|
||||||
|
buildanimationDrawableimage(data.imageList),
|
||||||
|
buildanimationDrawablesound(data.soundList),
|
||||||
|
this.next,
|
||||||
|
]);
|
||||||
|
break;
|
||||||
case "tip":
|
case "tip":
|
||||||
this.next = MotaActionBlocks["tip_s"].xmlText([
|
this.next = MotaActionBlocks["tip_s"].xmlText([
|
||||||
data.text,
|
data.text,
|
||||||
@ -2785,6 +2840,42 @@ MotaActionParser = function () {
|
|||||||
});
|
});
|
||||||
return list;
|
return list;
|
||||||
};
|
};
|
||||||
|
MotaActionFunctions.processanimationDrawableimage = function (overList) {
|
||||||
|
var list = [];
|
||||||
|
overList.forEach(function (one) {
|
||||||
|
list.push([
|
||||||
|
one.image,
|
||||||
|
one.beforefarme,
|
||||||
|
one.globalAlpha,
|
||||||
|
one.cx,
|
||||||
|
one.cy,
|
||||||
|
one.cw,
|
||||||
|
one.ch,
|
||||||
|
one.x,
|
||||||
|
one.y,
|
||||||
|
one.w,
|
||||||
|
one.h,
|
||||||
|
one.afterfarme,
|
||||||
|
one.aglobalAlpha,
|
||||||
|
one.acx,
|
||||||
|
one.acy,
|
||||||
|
one.acw,
|
||||||
|
one.ach,
|
||||||
|
one.ax,
|
||||||
|
one.ay,
|
||||||
|
one.aw,
|
||||||
|
one.ah,
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
return list;
|
||||||
|
};
|
||||||
|
MotaActionFunctions.processanimationDrawablesound = function (overList) {
|
||||||
|
var list = [];
|
||||||
|
overList.forEach(function (one) {
|
||||||
|
list.push([one.sound, one.startfarme, one.stopbefore]);
|
||||||
|
});
|
||||||
|
return list;
|
||||||
|
};
|
||||||
|
|
||||||
MotaActionFunctions.processMultiLoc = function (EvalString_0, EvalString_1) {
|
MotaActionFunctions.processMultiLoc = function (EvalString_0, EvalString_1) {
|
||||||
var floorstr = "";
|
var floorstr = "";
|
||||||
|
@ -1 +1 @@
|
|||||||
{"viewportLoc":[0,0],"editorLastFloorId":"jiaotang"}
|
{"viewportLoc":[0,0],"editorLastFloorId":"street02"}
|
@ -40,7 +40,24 @@ main.floors.street01=
|
|||||||
],
|
],
|
||||||
"4,11": [
|
"4,11": [
|
||||||
{
|
{
|
||||||
"type": "op"
|
"type": "animationDrawable",
|
||||||
|
"allFarme": 30,
|
||||||
|
"globalAlpha": 1,
|
||||||
|
"imageList": [
|
||||||
|
{
|
||||||
|
"image": "",
|
||||||
|
"h": 1,
|
||||||
|
"globalAlpha": 1,
|
||||||
|
"aglobalAlpha": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"soundList": [
|
||||||
|
{
|
||||||
|
"sound": "",
|
||||||
|
"startfarme": 0,
|
||||||
|
"stopbefore": false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -141,6 +141,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
|||||||
core.doAction()
|
core.doAction()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
core.registerEvent('animationDrawable', function (data) {
|
||||||
|
if (!main.replayChecking && !core.isReplaying()) {
|
||||||
|
core.animationDrawable(data.allFarme, data.color, data.globalAlpha, data.imageList, data.soundList)
|
||||||
|
} else {
|
||||||
|
core.doAction()
|
||||||
|
}
|
||||||
|
})
|
||||||
core.registerEvent("cgtext", function (data) {
|
core.registerEvent("cgtext", function (data) {
|
||||||
if (!main.replayChecking && !core.isReplaying()) {
|
if (!main.replayChecking && !core.isReplaying()) {
|
||||||
core.ui.cgText.image = data.bg;
|
core.ui.cgText.image = data.bg;
|
||||||
@ -9418,6 +9425,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
|||||||
MotaActionBlocks["callLoad_s"].xmlText(),
|
MotaActionBlocks["callLoad_s"].xmlText(),
|
||||||
],
|
],
|
||||||
音像处理: [
|
音像处理: [
|
||||||
|
MotaActionBlocks["animationDrawable_s"].xmlText(),
|
||||||
MotaActionBlocks["showImage_s"].xmlText(),
|
MotaActionBlocks["showImage_s"].xmlText(),
|
||||||
MotaActionBlocks["showImage_1_s"].xmlText(),
|
MotaActionBlocks["showImage_1_s"].xmlText(),
|
||||||
MotaActionBlocks["hideImage_s"].xmlText(),
|
MotaActionBlocks["hideImage_s"].xmlText(),
|
||||||
@ -14189,5 +14197,80 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
|
|||||||
})
|
})
|
||||||
|
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
"帧动画/图片叠拼": function () {
|
||||||
|
// 在此增加新插件
|
||||||
|
this.animationDrawable = function (
|
||||||
|
allFarme = 0,
|
||||||
|
color = "#000000",
|
||||||
|
globalAlpha = 1,
|
||||||
|
imageList = [{ image: '', beforefarme: 0, cx: 0, cy: 0, cw: 0, ch: 0, x: 0, y: 0, w: 0, h: 0, globalAlpha: 1, afterfarme: 0, acx: 0, acy: 0, acw: 0, ach: 0, ax: 0, ay: 0, aw: 0, ah: 0, aglobalAlpha: 1 }],
|
||||||
|
soundList = [{ sound: "", startfarme: 0, stopbefore: false }]
|
||||||
|
|
||||||
|
) {
|
||||||
|
if (!core.isPlaying()) {
|
||||||
|
return core.doAction();
|
||||||
|
}
|
||||||
|
const canvas = main.dom.over
|
||||||
|
const ctx = canvas.getContext('2d')
|
||||||
|
canvas.style.display = 'block'
|
||||||
|
let farme = 0
|
||||||
|
core.registerAnimationFrame('animationDrawable', function () {
|
||||||
|
if (core.domStyle.isVertical) {
|
||||||
|
canvas.width = 416 * 3;
|
||||||
|
canvas.height = 676 * 3;
|
||||||
|
ctx.save(); //保存设置
|
||||||
|
ctx.translate(416 * 3, 0); //重新定位右上角为基准
|
||||||
|
ctx.rotate(Math.PI / 2); //旋转90度
|
||||||
|
} else {
|
||||||
|
canvas.width = 676 * 3;
|
||||||
|
canvas.height = 416 * 3;
|
||||||
|
}
|
||||||
|
ctx.globalAlpha = globalAlpha
|
||||||
|
core.fillRect(ctx, 0, 0, canvas.width, canvas.height, color)
|
||||||
|
|
||||||
|
imageList.forEach(function (one) {
|
||||||
|
if (farme >= (one.beforefarme ?? 0) && farme <= (one.afterfarme ?? allFarme)) {
|
||||||
|
const img = core.material.images.images?.[one.image];
|
||||||
|
if (img) {
|
||||||
|
const gla = one.globalAlpha ?? 1;
|
||||||
|
const agla = one.aglobalAlpha ?? gla,
|
||||||
|
beforefarme = one.beforefarme ?? 0;
|
||||||
|
const afterfarme = one.afterfarme ?? allFarme;
|
||||||
|
|
||||||
|
ctx.globalAlpha = gla + (agla - gla) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1)
|
||||||
|
const cx = one.cx ?? 0 + (one.acx ?? 0 - one.cx ?? 0) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1),
|
||||||
|
cy = one.cy ?? 0 + (one.acy ?? 0 - one.cy ?? 0) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1),
|
||||||
|
cw = one.cw ?? img.width + (one.acw ?? img.width - one.cw ?? img.width) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1),
|
||||||
|
ch = one.ch ?? img.height + (one.acw ?? img.height - one.cw ?? img.height) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1),
|
||||||
|
x = one.x ?? 0 + (one.ax ?? 0 - one.x ?? 0) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1),
|
||||||
|
y = one.y ?? 0 + (one.ay ?? 0 - one.y ?? 0) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1),
|
||||||
|
w = one.w ?? canvas.width + (one.aw ?? canvas.width - one.w ?? canvas.width) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1),
|
||||||
|
h = one.h ?? canvas.height + (one.aw ?? canvas.height - one.w ?? canvas.height) * (farme - one.beforefarme ?? 0) / ((one.afterfarme ?? 0 - one.beforefarme ?? 0) || 1)
|
||||||
|
|
||||||
|
ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
soundList.forEach(function (one) {
|
||||||
|
const lisen = one.sound && core.material.sounds[one.sound] && core.musicStatus.soundStatus;
|
||||||
|
if (frame == one.startfarme && lisen) {
|
||||||
|
if (one.stopbefore) core.stopSound()
|
||||||
|
core.playSound(sound);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
farme++;
|
||||||
|
ctx.globalAlpha = 1
|
||||||
|
ctx.restore();
|
||||||
|
|
||||||
|
core.clearMap(ctx)
|
||||||
|
if (farme > allFarme) {
|
||||||
|
core.unregisterAnimationFrame('animationDrawable')
|
||||||
|
canvas.style.display = 'none'
|
||||||
|
core.doAction()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user