From 105a35c0870a9fbf94f33100e627616fe8523166 Mon Sep 17 00:00:00 2001 From: strawberry42271 <2806566736@qq.com> Date: Tue, 31 Dec 2024 18:54:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B8=A7=E5=8A=A8=E7=94=BB=E4=BF=AE=E5=A4=8Dbu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 62 ++++++++++++++++++---------------- _server/config.json | 2 +- project/floors/street01.js | 35 +++++++++++++++---- project/plugins.js | 69 ++++++++++++++++++++------------------ 4 files changed, 100 insertions(+), 68 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index ab01656..17f840b 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -2477,9 +2477,10 @@ return code; */; animationDrawable_s - : '帧动画' '总显示帧数' IntString '底色' ColorString? Colour '底色透明度' Number BGNL?Newline + : '帧动画' '总显示帧数' IntString '底色' ColorString? Colour '底色透明度' IntString? BGNL?Newline '图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline '(剪裁区域不填写为全图,绘制区域不填写为全画面)'BGNL?Newline + '(透明度100为不透明,默认为不透明,结束透明度默认与开始透明度相同)'BGNL?Newline animationDrawableimage+? Newline '音频序列(到达对应帧进行播放)'BGNL?Newline animationDrawablesound+? Newline @@ -2488,16 +2489,16 @@ animationDrawable_s /* animationDrawable_s tooltip : animationDrawable:帧动画图片叠加 helpUrl : /_docs/#/instruction -default : [30,"",'rgb(0, 0, 0)',1] +default : [30,"0, 0, 0",'rgb(0, 0, 0)',""] allImages : ['EvalString_0'] colour : this.imageColor -if (Number_0 < 0||Number_0>1) throw new Error('透明度范围为0-1,不填默认为1,0为透明,1为不透明') +if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('透明度范围为0-100,0为透明,100为不透明,不填默认为不透明') ColorString_0 = ColorString_0 ? (', "color": ['+ColorString_0+']') : ''; -Number_0 = Number_0 ? (', "globalAlpha": '+Number_0+'') : ''; +IntString_1 = IntString_1 ? (', "globalAlpha": '+IntString_1+'') : ''; 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'; +var code = '{"type": "animationDrawable", "allFarme": '+IntString_0+ColorString_0+IntString_1+imageList+soundList+'},\n'; return code; */; @@ -2507,37 +2508,40 @@ animationDrawableList | animationDrawabletextEmpty; animationDrawableimage - : '图片' EvalString? '起始帧' IntString? '起始透明度' Number BGNL? Newline + : '图片' EvalString? '起始帧' IntString? '起始透明度' IntString? 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 + '结束帧' IntString? '结束透明度' IntString? '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString? Newline /* animationDrawableimage tooltip : 帧动画图片列表 helpUrl : /_docs/#/instruction -default : ["","",1,"","","","","","","","","",1,"","","","","","","",""] +default : ["","","","","","","","","","","","","","","","","","","","",""] 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') +if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('透明度范围为0-100,0为透明,100为不透明,不填默认为不透明') +if (IntString_11&&(IntString_11 < 0||IntString_11>100)) throw new Error('透明度范围为0-100,0为透明,100为不透明,不填默认为不透明') 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+'},' +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 ? (', "afterfarme": '+IntString_10+'') : ''; +IntString_11 = IntString_11 ? (', "aglobalAlpha": '+IntString_11+'') : ''; +IntString_12 = IntString_12 ? (', "acx": '+IntString_12+'') : ''; +IntString_13 = IntString_13 ? (', "acy": '+IntString_13+'') : ''; +IntString_14 = IntString_14 ? (', "acw": '+IntString_14+'') : ''; +IntString_15 = IntString_15 ? (', "ach": '+IntString_15+'') : ''; +IntString_16 = IntString_16 ? (', "ax": '+IntString_16+'') : ''; +IntString_17 = IntString_17 ? (', "ay": '+IntString_17+'') : ''; +IntString_18 = IntString_18 ? (', "aw": '+IntString_18+'') : ''; +IntString_19 = IntString_19 ? (', "ah": '+IntString_19+'') : ''; + +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+'},' */; animationDrawablesound diff --git a/_server/config.json b/_server/config.json index 84aac55..5d318ea 100644 --- a/_server/config.json +++ b/_server/config.json @@ -1 +1 @@ -{"viewportLoc":[0,0],"editorLastFloorId":"street02"} \ No newline at end of file +{"viewportLoc":[0,0],"editorLastFloorId":"street01"} \ No newline at end of file diff --git a/project/floors/street01.js b/project/floors/street01.js index 13045cc..96217a2 100644 --- a/project/floors/street01.js +++ b/project/floors/street01.js @@ -41,14 +41,37 @@ main.floors.street01= "4,11": [ { "type": "animationDrawable", - "allFarme": 30, - "globalAlpha": 1, + "allFarme": 300, + "color": [ + 0, + 0, + 0 + ], "imageList": [ { - "image": "", - "h": 1, - "globalAlpha": 1, - "aglobalAlpha": 1 + "image": "bg_1511.png", + "beforefarme": 50, + "globalAlpha": 0, + "afterfarme": 250, + "aglobalAlpha": 100 + }, + { + "image": "eve_010304.png", + "beforefarme": 70, + "globalAlpha": 0, + "afterfarme": 170, + "aglobalAlpha": 100, + "ax": 0, + "ay": 0 + }, + { + "image": "eve_010304.png", + "beforefarme": 171, + "globalAlpha": 100, + "afterfarme": 270, + "aglobalAlpha": 100, + "ax": 800, + "ay": 0 } ], "soundList": [ diff --git a/project/plugins.js b/project/plugins.js index 38645e7..15ee72e 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -2609,6 +2609,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = main.dom.video1.style.width = obj.totalWidth + 3 + "px"; main.dom.video1.style.height = obj.totalHeight + 3 + "px"; } + + const innerSize = obj.canvasWidth * core.domStyle.scale + "px"; for (let i = 0; i < core.dom.gameCanvas.length; ++i) core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[ @@ -2655,8 +2657,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = const uictx = main.dom.outerUI.getContext("2d"); core.registerAnimationFrame("lightFloor", true, function () { globalAlphafloor += globalAlphafloorStatus; - if (globalAlphafloor === 100) globalAlphafloorStatus = -4; - if (globalAlphafloor === 0) globalAlphafloorStatus = 4; + if (globalAlphafloor === 100) globalAlphafloorStatus = -2; + if (globalAlphafloor === 0) globalAlphafloorStatus = 2; if (core.domStyle.isVertical) { core.clearMap( @@ -2676,7 +2678,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.drawImage( uictx, "green.png", - MAP_BLOCK_LEFT_VERTICAL + 125, + MAP_BLOCK_LEFT_VERTICAL + 135, MAP_BLOCK_TOP_VERTICAL + 170 ); uictx.globalAlpha = 1; @@ -2692,7 +2694,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = uictx, "green.png", MAP_BLOCK_LEFT + 150, - MAP_BLOCK_TOP + 170 + MAP_BLOCK_TOP + 180 ); uictx.globalAlpha = 1; } @@ -14200,54 +14202,58 @@ 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 }] + allFarme, + color, + globalAlpha, + imageList, + soundList ) { if (!core.isPlaying()) { return core.doAction(); } - const canvas = main.dom.over - const ctx = canvas.getContext('2d') - canvas.style.display = 'block' + const over = main.dom.over + const ctx = over.getContext('2d') + over.style.display = "block" + let farme = 0 - core.registerAnimationFrame('animationDrawable', function () { + core.registerAnimationFrame('animationDrawable', true, function () { + if (core.domStyle.isVertical) { - canvas.width = 416 * 3; - canvas.height = 676 * 3; + ctx.canvas.width = 416 * 3; + ctx.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.canvas.width = 676 * 3; + ctx.canvas.height = 416 * 3; } - ctx.globalAlpha = globalAlpha - core.fillRect(ctx, 0, 0, canvas.width, canvas.height, color) + + ctx.globalAlpha = (globalAlpha ?? 100) / 100 + core.fillRect(ctx, 0, 0, over.width, over.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 gla = one.globalAlpha ?? 100; 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.globalAlpha = (gla + (agla - gla) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1)) / 100 + const cx = (one.cx ?? 0) + ((one.acx ?? 0) - (one.cx ?? 0)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1), + cy = (one.cy ?? 0) + ((one.acy ?? 0) - (one.cy ?? 0)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1), + cw = (one.cw ?? img.width) + ((one.acw ?? img.width) - (one.cw ?? img.width)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1), + ch = (one.ch ?? img.height) + ((one.acw ?? img.height) - (one.cw ?? img.height)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1), + x = (one.x ?? 0) + ((one.ax ?? 0) - (one.x ?? 0)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1), + y = (one.y ?? 0) + ((one.ay ?? 0) - (one.y ?? 0)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1), + w = (one.w ?? over.width) + ((one.aw ?? over.width) - (one.w ?? over.width)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1), + h = (one.h ?? over.height) + ((one.aw ?? over.height) - (one.w ?? over.height)) * (farme - beforefarme) / ((afterfarme - beforefarme) || 1) ctx.drawImage(img, cx, cy, cw, ch, x, y, w, h) } } @@ -14255,7 +14261,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }) soundList.forEach(function (one) { const lisen = one.sound && core.material.sounds[one.sound] && core.musicStatus.soundStatus; - if (frame == one.startfarme && lisen) { + if (farme == one.startfarme && lisen) { if (one.stopbefore) core.stopSound() core.playSound(sound); } @@ -14264,10 +14270,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ctx.globalAlpha = 1 ctx.restore(); - core.clearMap(ctx) if (farme > allFarme) { core.unregisterAnimationFrame('animationDrawable') - canvas.style.display = 'none' + over.style.display = 'none' core.doAction() } })