From a1ffc89164d2817233c98b35e3684bc5e098680e Mon Sep 17 00:00:00 2001 From: strawberry42271 <2806566736@qq.com> Date: Thu, 17 Apr 2025 09:49:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A8=E7=94=BB=E7=A7=BB=E5=8A=A8=E3=80=81?= =?UTF-8?q?=E5=B8=A7=E5=8A=A8=E7=94=BB=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 221 +++++++++++++++++++++++++++++++++++- _server/MotaActionParser.js | 159 ++++++++++++++++++++++++++ _server/editor_blockly.js | 10 ++ project/plugins.js | 119 ++++++++++++++++++- 4 files changed, 505 insertions(+), 4 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 9c76147..2dbc31f 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -837,6 +837,14 @@ action | insert_1_s | insert_2_s | exit_s + | setanimate_s + | deleteanimate_s + | playanimate_s + | clearanimate_s + | animateloop_s + | animatemove_s + | animatereverse_s + | animatepause_s | setBlock_s | turnBlock_s | showFloorImg_s @@ -874,6 +882,7 @@ action | follow_s | unfollow_s | animate_s + | moveAnimate_s | animateResize_s | pauseAnimate_s | remuseAnimate_s @@ -1075,7 +1084,7 @@ return code+',\n'; animationDrawable_s - : '帧动画' '总显示帧数' IntString '底色' ColorString? Colour '底色不透明度' IntString? BGNL?Newline + : '帧动画(剧情画面)' '总显示帧数' IntString '底色' ColorString? Colour '底色不透明度' IntString? BGNL?Newline '图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline '(剪裁区域不填写为全图,绘制区域不填写为全画面)'BGNL?Newline '(不透明度100为不透明,默认为不透明,结束不透明度默认与开始透明度相同)'BGNL?Newline @@ -2398,6 +2407,212 @@ var code = '{"type": "animate", "name": "'+EvalString_0+'", "loc": "hero"'+Bool_ return code; */; + +animatereverse_s + : '调整正在播放的帧动画/特效 编号'IntString?'倒放'Bool'(不填编号为对所有正在进行的帧动画/特效进行操作)' + +/* animatereverse_s +tooltip : animatereverse:调整正在播放的帧动画(倒放) +helpUrl : /_docs/#/instruction +default : ["",false] +colour : this.imageColor +IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : '' +var code = '{"type": "animatereverse"'+IntString_0+',"reverse":'+Bool_0+'},\n'; +return code; +*/; + +animatepause_s + : '调整正在播放的帧动画/特效 编号'IntString?'暂停'Bool'(不填编号为对所有正在进行的帧动画/特效进行操作)' + +/* animatepause_s +tooltip : animatereverse:调整正在播放的帧动画(暂停) +helpUrl : /_docs/#/instruction +default : ["",false] +colour : this.imageColor +IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : '' +var code = '{"type": "animatepause"'+IntString_0+',"pause":'+Bool_0+'},\n'; +return code; +*/; + + +setanimate_s + : '新建 帧动画/特效' '名称' EvalString '参照点偏移像素x' IntString? 'y' IntString? '动画大小 宽' IntString '高' IntString '总帧数' IntString BGNL?Newline + '图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline + '(剪裁区域不填写为全图,绘制区域不填写为全画面)'BGNL?Newline + '(不透明度100为不透明,默认为不透明,结束透明度默认与开始不透明度相同)'BGNL?Newline + animateDrawableimage+? Newline + '音频序列(到达对应帧进行播放)'BGNL?Newline + animateDrawablesound+? Newline + +/* setanimate_s +tooltip : setanimate:设置帧动画/特效(此项仅储存,不播放) +helpUrl : /_docs/#/instruction +default : ["sword","","",192,192,60] +colour : this.imageColor +IntString_0 = IntString_0 ? (', "px": '+IntString_0+'') : ''; +IntString_1 = IntString_1 ? (', "py": '+IntString_1+'') : ''; +var imageList=animateDrawableimage_0?',"imageList": [\n'+animateDrawableimage_0.slice(0,-1)+'\n]':'' +var soundList=animateDrawablesound_0?',"soundList": [\n'+animateDrawablesound_0.slice(0,-1)+'\n]':'' +var code = '{"type": "setanimate", "name": "'+EvalString_0+'"'+IntString_0+IntString_1+' ,"width": '+IntString_2+', "height": '+IntString_3+', "allFarme": '+IntString_4+imageList+soundList+'},\n'; +return code; +*/; + +animateDrawableList + : animateDrawableimage + | animateDrawablesound + | animateDrawabletextEmpty; + +animateDrawableimage + : '图片' EvalString? '起始帧' IntString? '起始不透明度' IntString? BGNL? Newline + '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString?'旋转角度'IntString? BGNL? Newline + '结束帧' IntString? '结束不透明度' IntString? '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString?'旋转角度'IntString? Newline +/* animateDrawableimage +tooltip : 帧动画图片列表 +helpUrl : /_docs/#/instruction +default : ["","","","","","","","","","","","","","","","","","","","","","",""] +colour : this.subColor +allImages : ['EvalString_0'] +if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('不透明度范围为0-100,0为透明,100为不透明,不填默认为不透明') +if (IntString_12&&(IntString_12 < 0||IntString_12>100)) throw new Error('不透明度范围为0-100,0为透明,100为不透明,不填默认为不透明') +IntString_0 = IntString_0 ? (', "beforefarme": '+IntString_0+'') : ''; +IntString_1 = IntString_1 ? (', "globalAlpha": '+IntString_1+'') : ''; +IntString_2 = IntString_2 ? (', "cx": '+IntString_2+'') : ''; +IntString_3 = IntString_3 ? (', "cy": '+IntString_3+'') : ''; +IntString_4 = IntString_4 ? (', "cw": '+IntString_4+'') : ''; +IntString_5 = IntString_5 ? (', "ch": '+IntString_5+'') : ''; +IntString_6 = IntString_6 ? (', "x": '+IntString_6+'') : ''; +IntString_7 = IntString_7 ? (', "y": '+IntString_7+'') : ''; +IntString_8 = IntString_8 ? (', "w": '+IntString_8+'') : ''; +IntString_9 = IntString_9 ? (', "h": '+IntString_9+'') : ''; +IntString_10 = IntString_10 ? (', "angle": '+IntString_10+'') : ''; + +IntString_11 = IntString_11 ? (', "afterfarme": '+IntString_11+'') : ''; +IntString_12 = IntString_12 ? (', "aglobalAlpha": '+IntString_12+'') : ''; +IntString_13 = IntString_13 ? (', "acx": '+IntString_13+'') : ''; +IntString_14 = IntString_14 ? (', "acy": '+IntString_14+'') : ''; +IntString_15 = IntString_15? (', "acw": '+IntString_15+'') : ''; +IntString_16 = IntString_16 ? (', "ach": '+IntString_16+'') : ''; +IntString_17 = IntString_17 ? (', "ax": '+IntString_17+'') : ''; +IntString_18 = IntString_18 ? (', "ay": '+IntString_18+'') : ''; +IntString_19 = IntString_19 ? (', "aw": '+IntString_19+'') : ''; +IntString_20 = IntString_20 ? (', "ah": '+IntString_20+'') : ''; +IntString_21 = IntString_21 ? (', "aangle": '+IntString_21+'') : ''; +return '{ "image":"'+EvalString_0+'"'+IntString_0+IntString_1+IntString_2+IntString_3+IntString_4+IntString_5+IntString_6+IntString_7+IntString_8+IntString_9+IntString_10+IntString_11+IntString_12+IntString_13+IntString_14+IntString_15+IntString_16+IntString_17+IntString_18+IntString_19+IntString_20+IntString_21+'},' +*/; + +animateDrawablesound + : '音效' EvalString? '起始帧' IntString '是否停止其他音效'Bool Newline + +/* animateDrawablesound +tooltip : 帧动画配音 +helpUrl : /_docs/#/instruction +default : ["",0,false] +colour : this.subColor +allSounds : ['EvalString_0'] + +return '{ "sound":"'+EvalString_0+'","startfarme":'+IntString_0+',"stopbefore":'+Bool_0+'},' +*/; + +animateDrawabletextEmpty + : Newline + +/* animateDrawabletextEmpty +var code = []; +return code; +*/; + +deleteanimate_s + : '删除 帧动画/特效' '名称' EvalString Newline + +/* deleteanimate_s +tooltip : deleteanimate:删除储存的帧动画 +helpUrl : /_docs/#/instruction +default : ["zone"] + +colour : this.imageColor + +var code = '{"type": "deleteanimate", "name": "'+EvalString_0+'"},\n'; +return code; +*/; + +playanimate_s + : '播放 帧动画/特效' '名称' EvalString '编号'IntString?'像素x' IntString? 'y' IntString? '跟随勇士' Bool 'x方向缩放' EvalString? 'y方向缩放'EvalString?'循环'Bool'倒放'Bool Newline + +/* playanimate_s +tooltip : playanimate:播放帧动画,选择跟随勇士后x、y将失效改为勇士中心坐标 +helpUrl : /_docs/#/instruction +default : ["zone","","","",false,1,1,false,false] +previewBlock : true +colour : this.imageColor +IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : ''; +IntString_1 = IntString_1 ? (', "x": '+IntString_1+'') : ''; +IntString_2 = IntString_2 ? (', "y": '+IntString_2+'') : ''; +if(EvalString_1&&!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_1))throw new Error("此项仅能填写小数、整数或不填"); +if(EvalString_2&&!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_2))throw new Error("此项仅能填写小数、整数或不填"); +EvalString_1 = EvalString_1 ? (', "scalex": '+EvalString_1+'') : ''; +EvalString_2 = EvalString_2 ? (', "scaley": '+EvalString_2+'') : ''; +var code = '{"type": "playanimate", "name": "'+EvalString_0+'"'+IntString_0+IntString_1+IntString_2+',"hero":'+Bool_0+EvalString_1+EvalString_2+',"loop":'+Bool_1+',"reverse":'+Bool_2+'},\n'; +return code; +*/; + +clearanimate_s + : '停止正在播放的帧动画/特效 编号'IntString?'(不填编号为对所有正在进行的帧动画/特效进行操作)' + +/* clearanimate_s +tooltip : clearanimate:清空正在播放的帧动画 +helpUrl : /_docs/#/instruction +default : [""] +colour : this.imageColor +IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : ''; +var code = '{"type": "clearanimate"'+IntString_0+'},\n'; +return code; +*/; + +animateloop_s + : '调整正在播放的帧动画/特效 编号'IntString?'循环'Bool '(不填编号为对所有正在进行的帧动画/特效进行操作)' + +/* animateloop_s +tooltip : animateloop:调整正在播放的帧动画(循环) +helpUrl : /_docs/#/instruction +default : ["",false] +colour : this.imageColor +IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : '' +var code = '{"type": "animateloop"'+IntString_0+',"loop":'+Bool_0+'},\n'; +return code; +*/; + +animatemove_s + : '移动正在播放的帧动画/特效 编号'IntString'目标像素x'PosString'y'PosString'移动时长'PosString'移动模式'MoveMode2_List? '(仅可对有编号的非跟随勇士帧动画/特效使用)' + +/* animatemove_s +tooltip : animateloop:调整正在播放的帧动画(循环) +helpUrl : /_docs/#/instruction +default : [0,0,0,1000,''] +previewBlock : true +colour : this.imageColor +IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : '' +MoveMode2_List_0=MoveMode2_List_0?(', "style": "'+MoveMode2_List_0+'"') : '' +var code = '{"type": "animatemove"'+IntString_0+',"px":'+PosString_0+',"py":'+PosString_1+',"time":'+PosString_2+MoveMode2_List_0+'},\n'; +return code; +*/; + + +moveAnimate_s + : '移动正在播放的帧动画/特效 编号'IntString'目标像素x'PosString'y'PosString'移动时长'PosString'移动模式'MoveMode2_List? '(仅可对有编号的非跟随勇士动画使用)' + +/* moveAnimate_s +tooltip : animateloop:调整正在播放的帧动画(循环) +helpUrl : /_docs/#/instruction +default : [0,0,0,1000,''] +previewBlock : true +colour : this.soundColor +IntString_0 = IntString_0 ? (', "id": '+IntString_0+'') : '' +MoveMode2_List_0=MoveMode2_List_0?(', "style": "'+MoveMode2_List_0+'"') : '' +var code = '{"type": "moveAnimate"'+IntString_0+',"px":'+PosString_0+',"py":'+PosString_1+',"time":'+PosString_2+MoveMode2_List_0+'},\n'; +return code; +*/; + + animateResize_s : '显示动画(60Fps)' EvalString '编号'PosString? '中心像素' 'x' PosString? 'y' PosString?'以勇士为中心' Bool'倒放' Bool'循环'Bool'不等待执行完毕' Bool Newline @@ -4614,6 +4829,10 @@ MoveMode_List : '匀速移动'|'缓入快出'|'快入缓出'|'缓入缓出'|'随机' /*MoveMode_List ['', 'easeIn', 'easeOut', 'easeInOut', 'random']*/; +MoveMode2_List + : '匀速移动'|'慢-快'|'快-慢'|'慢-快-慢'|'快-慢-快' + /*MoveMode2_List ['', 'in', 'out', 'in-out', 'center']*/; + NameMap_List : '确定'|'取消'|'操作失败'|'光标移动'|'打开界面'|'读档'|'存档'|'获得道具'|'回血'|'宝石'|'炸弹'|'飞行器'|'开关门'|'上下楼'|'跳跃'|'破墙镐'|'破冰镐'|'阻激夹域'|'穿脱装备'|'商店' /*NameMap_List ['确定','取消','操作失败','光标移动','打开界面','读档','存档','获得道具','回血','宝石','炸弹','飞行器','开关门','上下楼','跳跃','破墙镐','破冰镐','阻激夹域','穿脱装备','商店']*/; diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js index ed92f8e..abc0ae5 100644 --- a/_server/MotaActionParser.js +++ b/_server/MotaActionParser.js @@ -1191,6 +1191,126 @@ MotaActionParser = function () { this.next, ]); break; + case "setanimate": + var buildanimateDrawableimage = function (obj) { + obj = MotaActionFunctions.processanimateDrawableimage(obj || []); + var res = null; + for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) { + res = MotaActionBlocks["animateDrawableimage"].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], + one[21], + one[22], + res, + ]); + } + return res; + }; + var buildanimateDrawablesound = function (obj) { + obj = MotaActionFunctions.processanimateDrawablesound(obj || []); + var res = null; + for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) { + res = MotaActionBlocks["animateDrawablesound"].xmlText([ + one[0], + one[1], + one[2], + res, + ]); + } + return res; + }; + this.next = MotaActionBlocks["setanimate_s"].xmlText([ + data.name, + data.px, + data.py, + data.width, + data.height, + data.allFarme, + buildanimateDrawableimage(data.imageList), + buildanimateDrawablesound(data.soundList), + this.next, + ]); + break; + case "clearanimate": + this.next = MotaActionBlocks["clearanimate_s"].xmlText([ + data.id||"", + this.next]); + break; + case "animateloop": + this.next = MotaActionBlocks["animateloop_s"].xmlText([ + data.id||"", + data.loop, + this.next]); + break; + case "animatemove": + this.next = MotaActionBlocks["animatemove_s"].xmlText([ + data.id||0, + data.px||0, + data.py||0, + data.time||0, + data.style||"", + this.next]); + break; + case "moveAnimate": + this.next = MotaActionBlocks["moveAnimate_s"].xmlText([ + data.id||0, + data.px||0, + data.py||0, + data.time||0, + data.style||"", + this.next]); + break; + case "animatereverse": + this.next = MotaActionBlocks["animatereverse_s"].xmlText([ + data.id||"", + data.reverse, + this.next]); + break; + case "animatepause": + this.next = MotaActionBlocks["animatepause_s"].xmlText([ + data.id||"", + data.pause, + this.next]); + break; + case "deleteanimate": + this.next = MotaActionBlocks["deleteanimate_s"].xmlText([ + data.name, + this.next, + ]); + break; + case "playanimate": + this.next = MotaActionBlocks["playanimate_s"].xmlText([ + data.name, + data.id||"", + data.x, + data.y, + data.hero, + data.scalex||1, + data.scaley||1, + data.loop||false, + data.reverse||false, + this.next, + ]); + break; case "setViewport": // 设置视角 if (data.dxy) { this.next = MotaActionBlocks["setViewport_1_s"].xmlText([ @@ -2874,6 +2994,45 @@ MotaActionParser = function () { }); return list; }; + + MotaActionFunctions.processanimateDrawableimage = 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.angle, + one.afterfarme, + one.aglobalAlpha, + one.acx, + one.acy, + one.acw, + one.ach, + one.ax, + one.ay, + one.aw, + one.ah, + one.aangle, + ]); + }); + return list; + }; + MotaActionFunctions.processanimateDrawablesound = function (overList) { + var list = []; + overList.forEach(function (one) { + list.push([one.sound, one.startfarme, one.stopbefore]); + }); + return list; + }; MotaActionFunctions.processovertext = function (overList) { var list = []; overList.forEach(function (one) { diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index b3f478a..a3433b1 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -359,6 +359,16 @@ editor_blockly = function () { editor.uievent.previewUI([{ type: "fillRect", x:obj.centerX-5, y: obj.centerY-5, width:10, height: 10, style:"#FF0000"}]); } break; + case 'playanimate_s': // 显示帧动画 + if (obj.name && obj.x&&obj.y) { + editor.uievent.previewUI([{ type: "fillRect", x:obj.x-5, y: obj.y-5, width:10, height: 10, style:"#FF0000"}]); + } + break; + case 'animatemove_s': // 移动帧动画 + + editor.uievent.previewUI([{ type: "fillRect", x:obj.px-5, y: obj.py-5, width:10, height: 10, style:"#FF0000"}]); + + break; case 'setCurtain_0_s': // 更改色调 if (obj.color) { editor.uievent.previewUI([{ type: "fillRect", x: 0, y: 0, width: core.__PIXELS__, height: core.__PIXELS__, style: obj.color }]); diff --git a/project/plugins.js b/project/plugins.js index f50ea1f..fb13371 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -73,6 +73,78 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.doAction(); } }); + core.registerEvent("setanimate", function (data) { + data.px = data.px ?? 0; + data.py = data.py ?? 0; + core.setanimate( + data.name, + data.px, + data.py, + data.width, + data.height, + data.allFarme, + data.imageList, + data.soundList + ); + core.doAction(); + }); + core.registerEvent("animatemove", function (data) { + core.animatemove(data.id, data.px, data.py, data.time, data.style); + + core.doAction(); + }); + core.registerEvent("moveAnimate", function (data) { + core.maps.moveAnimate(data.id, data.px, data.py, data.time, data.style); + + core.doAction(); + }); + + core.registerEvent("animateloop", function (data) { + core.animateloop(data.id, data.loop); + + core.doAction(); + }); + core.registerEvent("animatereverse", function (data) { + core.animatereverse(data.id, data.reverse); + + core.doAction(); + }); + core.registerEvent("animatepause", function (data) { + core.animatepause(data.id, data.pause); + + core.doAction(); + }); + core.registerEvent("clearanimate", function (data) { + core.animateclear(data.id); + + core.doAction(); + }); + core.registerEvent("deleteanimate", function (data) { + core.deleteanimate(data.name); + core.doAction(); + }); + core.registerEvent("playanimate", function (data) { + if (!main.replayChecking && !core.isReplaying()) { + data.x = data.x ?? 0; + data.y = data.y ?? 0; + data.scalex = data.scalex ?? 1; + data.scaley = data.scaley ?? 1; + core.playanimate( + data.name, + data.id, + data.x, + data.y, + data.hero, + data.scalex, + data.scaley, + data.loop, + data.reverse + ); + core.doAction(); + } else { + core.doAction(); + } + }); core.registerEvent("addPop", function (data) { if (!main.replayChecking && !core.isReplaying()) { data.value = core.replaceText(data.value); @@ -12400,6 +12472,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = MotaActionBlocks["animate_s"].xmlText(), MotaActionBlocks["animate_1_s"].xmlText(), MotaActionBlocks["animateResize_s"].xmlText(), + MotaActionBlocks["moveAnimate_s"].xmlText(), MotaActionBlocks["pauseAnimate_s"].xmlText(), MotaActionBlocks["remuseAnimate_s"].xmlText(), MotaActionBlocks["stopAnimate_s"].xmlText(), @@ -12421,6 +12494,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ], 音像处理: [ MotaActionBlocks["animationDrawable_s"].xmlText(), + MotaActionBlocks["setanimate_s"].xmlText(), + MotaActionBlocks["deleteanimate_s"].xmlText(), + MotaActionBlocks["playanimate_s"].xmlText(), + MotaActionBlocks["clearanimate_s"].xmlText(), + MotaActionBlocks["animateloop_s"].xmlText(), + MotaActionBlocks["animatereverse_s"].xmlText(), + MotaActionBlocks["animatepause_s"].xmlText(), + MotaActionBlocks["animatemove_s"].xmlText(), MotaActionBlocks["introAndLoop_s"].xmlText(), MotaActionBlocks["showImage_s"].xmlText(), MotaActionBlocks["showImage_1_s"].xmlText(), @@ -25559,6 +25640,31 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }, "动画": function () { // 在此增加新插件 + const { Transition, linear, bezier, circle, hyper, trigo, power, inverseTrigo, shake, sleep } = core.plugin.animate; + //////移动动画////// + const tran = new Transition(); + maps.prototype.moveAnimate = function (id, px, py, time, style) { + if (!id) return + core.status.animateObjs.forEach(v => { + if (v.id === id) { + if (v.hero) return + if (!style) tran.mode(linear()) + else if (style === "in") { + tran.mode(trigo('sin', "in")) + } else if (style === "out") { + tran.mode(trigo('sin', "out")) + } else if (style === "in-out") { + tran.mode(trigo('sin', "in-out")) + } else if (style === "center") { + tran.mode(trigo('sin', "center")) + } + tran.time(time) + tran.value[v.id + v.name + "x"] = px + tran.value[v.id + v.name + "y"] = py + + } + }) + } control.prototype._animationFrame_animate = function (timestamp) { let frametime = timestamp - core.animateFrame.animateTime @@ -25618,11 +25724,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.maps._drawAnimateFrame('animate', obj.animate, herox, heroy, obj.index); } else { - core.maps._drawAnimateFrame('animate', obj.animate, obj.centerX, obj.centerY, obj.index); + core.maps._drawAnimateFrame('animate', obj.animate, tran.value[obj.id + obj.name + "x"], tran.value[obj.id + obj.name + "y"], obj.index); } }); } core.registerAnimationFrame("animate", true, core.control._animationFrame_animate); + ////// 绘制动画 ////// maps.prototype.drawAnimate = function (name, x, y, alignWindow, callback) { name = core.getMappedName(name); @@ -25643,7 +25750,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } animate.se = animate.se || {}; if (typeof animate.se == 'string') animate.se = { 1: animate.se }; - + tran.mode(linear()).time(1) + tran.value[id + name + "x"] = centerX + tran.value[id + name + "y"] = centerY var id = setTimeout(null); core.status.animateObjs.push({ "name": name, @@ -25680,6 +25789,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = if (typeof animate.se == 'string') animate.se = { 1: animate.se }; var id = id || setTimeout(null); + tran.mode(linear()).time(1) + if (!hero) tran.value[id + name + "x"] = centerX + if (!hero) tran.value[id + name + "y"] = centerY if (hero) core.status.animateObjs.push({ "name": name, "id": id, @@ -25820,5 +25932,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = if (core.status.animateObjs.length == 0) core.clearMap('animate'); } -} +}, + "帧动画(游戏画面)": null } \ No newline at end of file