From b2b60b133eec68ce8147451b2050e7633cc43c20 Mon Sep 17 00:00:00 2001 From: ckcz123 Date: Wed, 20 May 2020 17:48:17 +0800 Subject: [PATCH] =?UTF-8?q?:x,=20:y,=20:o=20=E7=BF=BB=E8=BD=AC=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E7=BB=98=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _server/MotaAction.g4 | 38 ++++++++---- _server/MotaActionParse.js | 12 ++-- _server/table/comment.js | 2 +- libs/control.js | 6 +- libs/events.js | 9 ++- libs/maps.js | 37 ++++++------ libs/ui.js | 116 +++++++++++++++++++++---------------- libs/utils.js | 4 +- project/functions.js | 2 +- v2.x-final更新.txt | 6 +- 10 files changed, 135 insertions(+), 97 deletions(-) diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4 index 023bd8fa..6449f4d5 100644 --- a/_server/MotaAction.g4 +++ b/_server/MotaAction.g4 @@ -1498,23 +1498,26 @@ return code; */; showImage_s - : '显示图片' '图片编号' Int '图片' EvalString BGNL? + : '显示图片' '图片编号' Int '图片' EvalString '翻转' Reverse_List BGNL? '绘制的起点像素' 'x' PosString 'y' PosString '不透明度' Number '时间' Int '不等待执行完毕' Bool Newline /* showImage_s tooltip : showImage:显示图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showImage%ef%bc%9a%e6%98%be%e7%a4%ba%e5%9b%be%e7%89%87 -default : [1,"bg.jpg","0","0",1,0,false] +default : [1,"bg.jpg","null","0","0",1,0,false] colour : this.printColor if(Int_0<=0 || Int_0>50) throw new Error('图片编号在1~50之间'); +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; var async = Bool_0?', "async": true':''; -var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'", "loc": ['+PosString_0+','+PosString_1+'], "opacity": '+Number_0+', "time": '+Int_1+async+'},\n'; +var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'"'+Reverse_List_0+', "loc": ['+PosString_0+','+PosString_1+'], "opacity": '+Number_0+', "time": '+Int_1+async+'},\n'; return code; */; showImage_1_s - : '显示图片' '图片编号' Int '图片' EvalString BGNL? + : '显示图片' '图片编号' Int '图片' EvalString '翻转' Reverse_List BGNL? '裁剪的起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? '不透明度' Number BGNL? '绘制的起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? '时间' Int '不等待执行完毕' Bool Newline @@ -1522,11 +1525,14 @@ showImage_1_s /* showImage_1_s tooltip : showImage_1:显示图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=showImage%ef%bc%9a%e6%98%be%e7%a4%ba%e5%9b%be%e7%89%87 -default : [1,"bg.jpg","0","0","","",1,"0","0","","",0,false] +default : [1,"bg.jpg","null","0","0","","",1,"0","0","","",0,false] colour : this.printColor if(Int_0<=0 || Int_0>50) throw new Error('图片编号在1~50之间'); +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; var async = Bool_0?', "async": true':''; -var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'", '+ +var code = '{"type": "showImage", "code": '+Int_0+', "image": "'+EvalString_0+'"'+Reverse_List_0+', '+ '"sloc": ['+PosString_0+','+PosString_1+','+PosString_2+','+PosString_3+'], '+ '"loc": ['+PosString_4+','+PosString_5+','+PosString_6+','+PosString_7+'], '+ '"opacity": '+Number_0+', "time": '+Int_1+async+'},\n'; @@ -2506,22 +2512,25 @@ return code; drawImage_s - : '绘制图片' EvalString '起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? Newline + : '绘制图片' EvalString '翻转' Reverse_List '起点像素' 'x' PosString 'y' PosString '宽' PosString? '高' PosString? Newline /* drawImage_s tooltip : drawImage:绘制图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawImage%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9b%be%e7%89%87 -default : ["bg.jpg","0","0","",""] +default : ["bg.jpg","null","0","0","",""] colour : this.subColor +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; PosString_2 = PosString_2 ? (', "w": '+PosString_2) : ''; PosString_3 = PosString_3 ? (', "h": '+PosString_3) : ''; -var code = '{"type": "drawImage", "image": "'+EvalString_0+'", "x": '+PosString_0+', "y": '+PosString_1+PosString_2+PosString_3+'},\n'; +var code = '{"type": "drawImage", "image": "'+EvalString_0+'"'+Reverse_List_0+', "x": '+PosString_0+', "y": '+PosString_1+PosString_2+PosString_3+'},\n'; return code; */; drawImage_1_s - : '绘制图片' EvalString '裁剪的起点像素' 'x' PosString 'y' PosString '宽' PosString '高' PosString BGNL? + : '绘制图片' EvalString '翻转' Reverse_List '裁剪的起点像素' 'x' PosString 'y' PosString '宽' PosString '高' PosString BGNL? '绘制的起点像素' 'x' PosString 'y' PosString '宽' PosString '高' PosString Newline @@ -2530,7 +2539,10 @@ tooltip : drawImage:绘制图片 helpUrl : https://h5mota.com/games/template/_docs/#/event?id=drawImage%ef%bc%9a%e7%bb%98%e5%88%b6%e5%9b%be%e7%89%87 default : ["bg.jpg","0","0","32","32","0","0","32","32"] colour : this.subColor -var code = '{"type": "drawImage", "image": "'+EvalString_0+'"'+ +if (Reverse_List_0 && Reverse_List_0 != 'null') { + Reverse_List_0 = ', "reverse": "' + Reverse_List_0 + '"'; +} else Reverse_List_0 = ''; +var code = '{"type": "drawImage", "image": "'+EvalString_0+'"'+Reverse_List_0+ ', "x": '+PosString_0+', "y": '+PosString_1+', "w": '+PosString_2+', "h": '+PosString_3+ ', "x1": '+PosString_4+', "y1": '+PosString_5+', "w1": '+PosString_6+', "h1": '+PosString_7+'},\n'; return code; @@ -2866,6 +2878,10 @@ TextBaseline_List : '不改变'|'顶部'|'悬挂'|'居中'|'标准值'|'ideographic'|'底部' /*TextBaseline_List ['null','top','hanging','middle','alphabetic','ideographic','bottom']*/; +Reverse_List + : '不改变'|'左右翻转'|'上下翻转'|'中心翻转' + /*Reverse_List ['null',':x',':y',':o']*/; + ShopUse_List : '金币' | '经验' /*ShopUse_List ['money','exp']*/; diff --git a/_server/MotaActionParse.js b/_server/MotaActionParse.js index b67de2ab..5dc47b83 100644 --- a/_server/MotaActionParse.js +++ b/_server/MotaActionParse.js @@ -63,9 +63,9 @@ ActionParser.prototype.parse = function (obj,type) { var buildEquip = function (obj) { obj = obj || {}; var text_choices = null; - var knownKeys = MotaActionBlocks.equipKnown.json.args0[0].options.map(function (one) {return one[1];}) + var knownEquipListKeys = MotaActionBlocks.equipKnown.json.args0[0].options.map(function (one) {return one[1];}) Object.keys(obj).sort().forEach(function (key) { - var one = knownKeys.indexOf(key) >= 0 ? 'equipKnown' : 'equipUnknown'; + var one = knownEquipListKeys.indexOf(key) >= 0 ? 'equipKnown' : 'equipUnknown'; text_choices = MotaActionBlocks[one].xmlText([ key, obj.key, text_choices ]); @@ -385,13 +385,13 @@ ActionParser.prototype.parseAction = function() { data.loc=data.loc||['',''] if (data.sloc) { this.next = MotaActionBlocks['showImage_1_s'].xmlText([ - data.code,data.image||data.name,data.sloc[0],data.sloc[1],data.sloc[2],data.sloc[3],data.opacity, + data.code,data.image||data.name,data.reverse,data.sloc[0],data.sloc[1],data.sloc[2],data.sloc[3],data.opacity, data.loc[0],data.loc[1],data.loc[2],data.loc[3],data.time||0,data.async||false,this.next ]); } else { this.next = MotaActionBlocks['showImage_s'].xmlText([ - data.code,data.image||data.name,data.loc[0],data.loc[1],data.opacity,data.time||0,data.async||false,this.next]); + data.code,data.image||data.name,data.reverse,data.loc[0],data.loc[1],data.opacity,data.time||0,data.async||false,this.next]); } break; case "hideImage": // 清除图片 @@ -837,12 +837,12 @@ ActionParser.prototype.parseAction = function() { case "drawImage": // 绘制图片 if (data.x1 != null && data.y1 != null && data.w1 != null && data.h1 != null) { this.next = MotaActionBlocks['drawImage_1_s'].xmlText([ - data.image, data.x, data.y, data.w, data.h, data.x1, data.y1, data.w1, data.h1, this.next + data.image, data.reverse, data.x, data.y, data.w, data.h, data.x1, data.y1, data.w1, data.h1, this.next ]); } else { this.next = MotaActionBlocks['drawImage_s'].xmlText([ - data.image, data.x, data.y, data.w, data.h, this.next + data.image, data.reverse, data.x, data.y, data.w, data.h, this.next ]); } break; diff --git a/_server/table/comment.js b/_server/table/comment.js index 5b92b2f1..753dc71d 100644 --- a/_server/table/comment.js +++ b/_server/table/comment.js @@ -393,7 +393,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = { "canFlyTo": { "_leaf": true, "_type": "checkbox", - "_docs": "可飞", + "_docs": "可楼传", "_data": "该楼能否被楼传器飞到(不能的话在该楼也不允许使用楼传器)" }, "canUseQuickShop": { diff --git a/libs/control.js b/libs/control.js index 5b6602c1..e1ea103b 100644 --- a/libs/control.js +++ b/libs/control.js @@ -260,7 +260,7 @@ control.prototype._animationFrame_weather_fog = function () { var w = core.__PIXELS__, h = core.__PIXELS__; core.setAlpha('weather', 0.5); core.animateFrame.weather.nodes.forEach(function (p) { - ctx.drawImage(core.animateFrame.weather.fog, p.x - ox, p.y - oy, w, h); + core.drawImage(ctx, core.animateFrame.weather.fog, p.x - ox, p.y - oy, w, h); p.x += p.xs; p.y += p.ys; if (p.x > core.bigmap.width*32 - w/2) { @@ -2515,10 +2515,10 @@ control.prototype.updateHeroIcon = function (name) { var ratio = Math.min(w / h, 1), width = 32 * ratio, left = 16 - width/2; var canvas = document.createElement("canvas"); - var context = canvas.getContext("2d"); + var ctx = canvas.getContext("2d"); canvas.width = 32; canvas.height = 32; - context.drawImage(image, 0, 0, w, h, left, 0, width, 32); + core.drawImage(ctx, image, 0, 0, w, h, left, 0, width, 32); core.statusBar.image.name.src = canvas.toDataURL("image/png"); } diff --git a/libs/events.js b/libs/events.js index 6fa74489..c03d7379 100644 --- a/libs/events.js +++ b/libs/events.js @@ -1455,7 +1455,7 @@ events.prototype._action_changePos = function (data, x, y, prefix) { events.prototype._action_showImage = function (data, x, y, prefix) { if (core.isReplaying()) data.time = 0; this.__action_doAsyncFunc(data.async || data.time == 0, core.showImage, - data.code, data.image, data.sloc, data.loc, data.opacity, data.time); + data.code, data.image + (data.reverse || ''), data.sloc, data.loc, data.opacity, data.time); } events.prototype._precompile_showImage = function (data) { @@ -2651,7 +2651,12 @@ events.prototype.closeDoor = function (x, y, id, callback) { ////// 显示图片 ////// events.prototype.showImage = function (code, image, sloc, loc, opacityVal, time, callback) { + var imageName = null; if (typeof image == 'string') { + imageName = image; + if (image.endsWith(':x') || image.endsWith(':y') || image.endsWith(':o')) { + image = image.substring(0, image.length - 2); + } image = core.getMappedName(image); image = core.material.images.images[image]; } @@ -2673,7 +2678,7 @@ events.prototype.showImage = function (code, image, sloc, loc, opacityVal, time, time = time || 0; var name = "image" + zIndex; var ctx = core.createCanvas(name, x, y, w, h, zIndex); - ctx.drawImage(image, sx, sy, sw, sh, 0, 0, w, h); + core.drawImage(ctx, imageName == null ? image : imageName, sx, sy, sw, sh, 0, 0, w, h); if (time == 0) { core.setOpacity(name, opacityVal); if (callback) callback(); diff --git a/libs/maps.js b/libs/maps.js index 9254a1cc..f7a94593 100644 --- a/libs/maps.js +++ b/libs/maps.js @@ -815,7 +815,7 @@ maps.prototype._drawBg_drawBackground = function (floorId, ctx) { if (groundInfo != null) { for (var i = 0; i < width; i++) { for (var j = 0; j < height; j++) { - ctx.drawImage(groundInfo.image, 32 * groundInfo.posX, groundInfo.height * groundInfo.posY, 32, 32, i * 32, j * 32, 32, 32); + core.drawImage(ctx, groundInfo.image, 32 * groundInfo.posX, groundInfo.height * groundInfo.posY, 32, 32, i * 32, j * 32, 32, 32); } } } @@ -899,6 +899,9 @@ maps.prototype._drawFloorImages = function (floorId, ctx, name, images, currStat images.forEach(function (t) { if (typeof t == 'string') t = [0, 0, t]; var dx = parseInt(t[0]), dy = parseInt(t[1]), imageName = t[2], frame = core.clamp(parseInt(t[4]), 1, 8); + if (imageName.endsWith(':x') || imageName.endsWith(':y') || imageName.endsWith(':o')) { + imageName = imageName.substring(0, imageName.length - 2); + } imageName = core.getMappedName(imageName); var image = core.material.images.images[imageName]; if (redraw && frame == 1) return; // 不重绘 @@ -911,7 +914,7 @@ maps.prototype._drawFloorImages = function (floorId, ctx, name, images, currStat this._drawFloorImages_gif(image, dx, dy); return; } - core.maps._drawFloorImage(ctx, name, t[3], image, offsetX, width, dx, dy, redraw); + core.maps._drawFloorImage(ctx, name, t[3], t[2], image, offsetX, width, dx, dy, redraw); } }); } @@ -941,11 +944,11 @@ maps.prototype._drawFloorImages_gif = function (image, dx, dy) { return; } -maps.prototype._drawFloorImage = function (ctx, name, type, image, offsetX, width, dx, dy, redraw) { +maps.prototype._drawFloorImage = function (ctx, name, type, imageName, image, offsetX, width, dx, dy, redraw) { var height = image.height; var _draw = function () { if (redraw) core.clearMap(ctx, dx, dy, width, height); - core.drawImage(ctx, image, offsetX, 0, width, height, dx, dy, width, height); + core.drawImage(ctx, imageName, offsetX, 0, width, height, dx, dy, width, height); } if (!type) { if (name != 'bg') return; @@ -958,11 +961,11 @@ maps.prototype._drawFloorImage = function (ctx, name, type, image, offsetX, widt if (type == 2) { if (name == 'bg') { if (redraw) core.clearMap(ctx, dx, dy + height - 32, width, 32); - core.drawImage('bg', image, offsetX, height - 32, width, 32, dx, dy + height - 32, width, 32); + core.drawImage('bg', imageName, offsetX, height - 32, width, 32, dx, dy + height - 32, width, 32); } else if (name == 'fg') { if (redraw) core.clearMap(ctx, dx, dy, width, height - 32); - core.drawImage('fg', image, offsetX, 0, width, height - 32, dx, dy, width, height - 32); + core.drawImage('fg', imageName, offsetX, 0, width, height - 32, dx, dy, width, height - 32); } return; } @@ -1035,7 +1038,7 @@ maps.prototype._drawAutotile_render = function(canvas, x, y, size, autotile, sta ]; var data = indexData[index]; if(index>=16){ // 拐角直接绘制 - canvas.drawImage(autotile, data[0][0], data[0][1], data[0][2], data[0][3], data[0][4], data[0][5], size/2, size/2); + core.drawImage(canvas, autotile, data[0][0], data[0][1], data[0][2], data[0][3], data[0][4], data[0][5], size/2, size/2); }else{ // 非拐角要根据是否已经绘制进行切分后绘制 this._drawAutotile_renderCut(canvas, autotile, x, y, size, data, done); } @@ -1076,7 +1079,7 @@ maps.prototype._drawAutotile_renderCut = function(canvas, autotile, x, y, size, } for(var i = 0; i<4; i++){ var dt = drawData[i];if(!dt)continue; - canvas.drawImage(autotile, dt[0], dt[1], 16, 16, x + (i % 2) * size / 2, y + parseInt(i / 2) * size / 2, size/2, size/2); + core.drawImage(canvas, autotile, dt[0], dt[1], 16, 16, x + (i % 2) * size / 2, y + parseInt(i / 2) * size / 2, size/2, size/2); }; } @@ -1086,7 +1089,7 @@ maps.prototype._drawAutotile_drawBlockByIndex = function (ctx, dx, dy, autotileI var sx = 16 * ((index - 1) % 6), sy = 16 * (~~((index - 1) / 6)); status = status || 0; status %= parseInt(autotileImg.width / 96); - ctx.drawImage(autotileImg, sx + 96 * status, sy, 16, 16, dx, dy, size / 2, size / 2); + core.drawImage(ctx, autotileImg, sx + 96 * status, sy, 16, 16, dx, dy, size / 2, size / 2); } maps.prototype._drawAutotile_getAutotileAroundId = function (currId, x, y, mapArr) { @@ -1157,16 +1160,16 @@ maps.prototype._makeAutotileEdges = function () { var n = core.maps.getNumberById(t); core.material.autotileEdges[n] = [n]; - ctx.clearRect(0, 0, 32, 32); - ctx.drawImage(core.material.images.autotile[t], 0, 0, 32, 32, 0, 0, 32, 32); + core.clearMap(ctx, 0, 0, 32, 32); + core.drawImage(ctx, core.material.images.autotile[t], 0, 0, 32, 32, 0, 0, 32, 32); var data = canvas.toDataURL("image/png"); autotileIds.forEach(function (t2) { if (t == t2) return; var n2 = core.maps.getNumberById(t2); - ctx.clearRect(0, 0, 32, 32); - ctx.drawImage(core.material.images.autotile[t2], 32, 0, 32, 32, 0, 0, 32, 32); + core.clearMap(ctx, 0, 0, 32, 32); + core.drawImage(ctx, core.material.images.autotile[t2], 32, 0, 32, 32, 0, 0, 32, 32); if (data == canvas.toDataURL("image/png")) { core.material.autotileEdges[n].push(n2); } @@ -1229,7 +1232,7 @@ maps.prototype._drawThumbnail_realDrawTempCanvas = function (floorId, blocks, op options.heroIcon = core.getMappedName(options.heroIcon); var icon = core.material.icons.hero[options.heroLoc.direction]; var height = core.material.images.images[options.heroIcon].height / 4; - tempCanvas.drawImage(core.material.images.images[options.heroIcon], icon.stop * 32, icon.loc * height, 32, height, + core.drawImage(tempCanvas, core.material.images.images[options.heroIcon], icon.stop * 32, icon.loc * height, 32, height, 32 * options.heroLoc.x, 32 * options.heroLoc.y + 32 - height, 32, height); } // 缩略图:前景 @@ -1259,21 +1262,21 @@ maps.prototype._drawThumbnail_drawToTarget = function (floorId, toDraw) { var side = (size - realWidth) / 2; core.fillRect(ctx, x, y, side, realHeight, '#000000'); core.fillRect(ctx, x + size - side, y, side, realHeight); - ctx.drawImage(tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x + side, y, realWidth, realHeight); + core.drawImage(ctx, tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x + side, y, realWidth, realHeight); } else { var realWidth = size, realHeight = realWidth * tempHeight / tempWidth; var side = (size - realHeight) / 2; core.fillRect(ctx, x, y, realWidth, side, '#000000'); core.fillRect(ctx, x, y + size - side, realWidth, side); - ctx.drawImage(tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x, y + side, realWidth, realHeight); + core.drawImage(ctx, tempCanvas.canvas, 0, 0, tempWidth, tempHeight, x, y + side, realWidth, realHeight); } } else { // 只绘制可见窗口 var offsetX = core.clamp(centerX - core.__HALF_SIZE__, 0, width - core.__SIZE__), offsetY = core.clamp(centerY - core.__HALF_SIZE__, 0, height - core.__SIZE__); - ctx.drawImage(tempCanvas.canvas, offsetX * 32, offsetY * 32, core.__PIXELS__, core.__PIXELS__, x, y, size, size); + core.drawImage(ctx, tempCanvas.canvas, offsetX * 32, offsetY * 32, core.__PIXELS__, core.__PIXELS__, x, y, size, size); } } diff --git a/libs/ui.js b/libs/ui.js index 7a8aee74..f07c2d3b 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -507,32 +507,61 @@ ui.prototype.splitLines = function (name, text, maxWidth, font) { ////// 绘制一张图片 ////// ui.prototype.drawImage = function (name, image, x, y, w, h, x1, y1, w1, h1) { + // 检测文件名以 :x, :y, :o 结尾,表示左右翻转,上下翻转和中心翻转 var ctx = this.getContextByName(name); if (!ctx) return; + var reverse = null; if (typeof image == 'string') { + if (image.endsWith(':x') || image.endsWith(':y') || image.endsWith(':o')) { + reverse = image.charAt(image.length - 1); + image = image.substring(0, image.length - 2); + } image = core.getMappedName(image); image = core.material.images.images[image]; - if (!image) return; + if (!image || !(image instanceof Image)) return; } + var scale = { + 'x': [-1, 1], + 'y': [1, -1], + 'o': [-1, -1] + }; + // 只能接受2, 4, 8个参数 if (x != null && y != null) { - if (w != null && h != null) { - if (x1 != null && y1 != null && w1 != null && h1 != null) { + if (w == null || h == null) { + // 两个参数变成四个参数 + w = image.width; + h = image.height; + } + if (x1 != null && y1 != null && w1 != null && h1 != null) { + if (reverse == null) { ctx.drawImage(image, x, y, w, h, x1, y1, w1, h1); - return; + } else { + ctx.save(); + ctx.translate(x1 + w1 / 2, y1 + h1 / 2); + ctx.scale(scale[reverse][0], scale[reverse][1]); + ctx.drawImage(image, x, y, w, h, -w1 / 2, -h1 / 2, w1, h1); + ctx.restore(); } - ctx.drawImage(image, x, y, w, h); return; } - ctx.drawImage(image, x, y); + if (reverse == null) { + ctx.drawImage(image, x, y, w, h); + } else { + ctx.save(); + ctx.translate(x + w / 2, y + h / 2); + ctx.scale(scale[reverse][0], scale[reverse][1]); + ctx.drawImage(image, -w / 2, -h / 2, w, h); + ctx.restore(); + } return; } } ui.prototype._uievent_drawImage = function (data) { this._createUIEvent(); - this.drawImage('uievent', data.image, core.calValue(data.x), core.calValue(data.y), core.calValue(data.w), core.calValue(data.h), + this.drawImage('uievent', data.image + (data.reverse || ''), core.calValue(data.x), core.calValue(data.y), core.calValue(data.w), core.calValue(data.h), core.calValue(data.x1), core.calValue(data.y1), core.calValue(data.w1), core.calValue(data.h1)); } @@ -547,7 +576,7 @@ ui.prototype.drawIcon = function (name, id, x, y, w, h, frame) { info = {image: core.statusBar.icons[id], posX: 0, posY: 0, height: 32}; else return; } - ctx.drawImage(info.image, 32 * (info.posX + frame), info.height * info.posY, 32, info.height, x, y, w || 32, h || info.height); + core.drawImage(ctx, info.image, 32 * (info.posX + frame), info.height * info.posY, 32, info.height, x, y, w || 32, h || info.height); } ui.prototype._uievent_drawIcon = function (data) { @@ -792,64 +821,53 @@ ui.prototype._clearUIEventSelector = function (codes) { ui.prototype._drawSelector = function (ctx, background, w, h, left, top) { left = left || 0; top = top || 0; - ctx = this.getContextByName(ctx); - if (!ctx) return; - if (typeof background == 'string') - background = core.material.images.images[background]; - if (!(background instanceof Image)) return; // back - ctx.drawImage(background, 130, 66, 28, 28, left+2, top+2, w-4, h-4); + core.drawImage(ctx, background, 130, 66, 28, 28, left+2, top+2, w-4, h-4); // corner - ctx.drawImage(background, 128, 64, 2, 2, left, top, 2, 2); - ctx.drawImage(background, 158, 64, 2, 2, left+w-2, top, 2, 2); - ctx.drawImage(background, 128, 94, 2, 2, left, top+h-2, 2, 2); - ctx.drawImage(background, 158, 94, 2, 2, left+w-2, top+h-2, 2, 2); + core.drawImage(ctx, background, 128, 64, 2, 2, left, top, 2, 2); + core.drawImage(ctx, background, 158, 64, 2, 2, left+w-2, top, 2, 2); + core.drawImage(ctx, background, 128, 94, 2, 2, left, top+h-2, 2, 2); + core.drawImage(ctx, background, 158, 94, 2, 2, left+w-2, top+h-2, 2, 2); // border - ctx.drawImage(background, 130, 64, 28, 2, left+2, top, w-4, 2); - ctx.drawImage(background, 130, 94, 28, 2, left+2, top+h-2, w-4, 2); - ctx.drawImage(background, 128, 66, 2, 28, left, top+2, 2,h-4); - ctx.drawImage(background, 158, 66, 2, 28, left+w-2, top+2, 2,h-4); + core.drawImage(ctx, background, 130, 64, 28, 2, left+2, top, w-4, 2); + core.drawImage(ctx, background, 130, 94, 28, 2, left+2, top+h-2, w-4, 2); + core.drawImage(ctx, background, 128, 66, 2, 28, left, top+2, 2,h-4); + core.drawImage(ctx, background, 158, 66, 2, 28, left+w-2, top+2, 2,h-4); } ////// 绘制 WindowSkin ui.prototype.drawWindowSkin = function(background, ctx, x, y, w, h, direction, px, py) { background = background || core.status.textAttribute.background; - if (typeof background == 'string') { - background = core.getMappedName(background); - background = core.material.images.images[background]; - } // 仿RM窗口皮肤 ↓ - var dstImage = core.getContextByName(ctx); - if (!dstImage) return; // 绘制背景 - dstImage.drawImage(background, 0, 0, 128, 128, x+2, y+2, w-4, h-4); + core.drawImage(ctx, background, 0, 0, 128, 128, x+2, y+2, w-4, h-4); // 绘制边框 // 上方 - dstImage.drawImage(background, 128, 0, 16, 16, x, y, 16, 16); + core.drawImage(ctx, background, 128, 0, 16, 16, x, y, 16, 16); for (var dx = 0; dx < w - 64; dx += 32) { - dstImage.drawImage(background, 144, 0, 32, 16,x+dx+16, y, 32, 16); - dstImage.drawImage(background, 144,48, 32, 16,x+dx+16, y+h-16, 32, 16); + core.drawImage(ctx, background, 144, 0, 32, 16,x+dx+16, y, 32, 16); + core.drawImage(ctx, background, 144,48, 32, 16,x+dx+16, y+h-16, 32, 16); } - dstImage.drawImage(background, 144, 0,w-dx-32, 16,x+dx+16, y,w-dx-32, 16); - dstImage.drawImage(background, 144,48,w-dx-32, 16,x+dx+16, y+h-16,w-dx-32, 16); - dstImage.drawImage(background, 176, 0, 16, 16, x+w-16, y, 16, 16); + core.drawImage(ctx, background, 144, 0,w-dx-32, 16,x+dx+16, y,w-dx-32, 16); + core.drawImage(ctx, background, 144,48,w-dx-32, 16,x+dx+16, y+h-16,w-dx-32, 16); + core.drawImage(ctx, background, 176, 0, 16, 16, x+w-16, y, 16, 16); // 左右 for (var dy = 0; dy < h - 64; dy += 32) { - dstImage.drawImage(background, 128,16, 16, 32, x,y+dy+16, 16, 32); - dstImage.drawImage(background, 176,16, 16, 32, x+w-16,y+dy+16, 16, 32); + core.drawImage(ctx, background, 128,16, 16, 32, x,y+dy+16, 16, 32); + core.drawImage(ctx, background, 176,16, 16, 32, x+w-16,y+dy+16, 16, 32); } - dstImage.drawImage(background, 128,16, 16,h-dy-32, x,y+dy+16, 16,h-dy-32); - dstImage.drawImage(background, 176,16, 16,h-dy-32, x+w-16,y+dy+16, 16,h-dy-32); + core.drawImage(ctx, background, 128,16, 16,h-dy-32, x,y+dy+16, 16,h-dy-32); + core.drawImage(ctx, background, 176,16, 16,h-dy-32, x+w-16,y+dy+16, 16,h-dy-32); // 下方 - dstImage.drawImage(background, 128,48, 16, 16, x, y+h-16, 16, 16); - dstImage.drawImage(background, 176,48, 16, 16, x+w-16, y+h-16, 16, 16); + core.drawImage(ctx, background, 128,48, 16, 16, x, y+h-16, 16, 16); + core.drawImage(ctx, background, 176,48, 16, 16, x+w-16, y+h-16, 16, 16); // arrow if(px != null && py != null){ if(direction == 'up'){ - dstImage.drawImage(background,128,96,32,32,px,y+h-3,32,32); + core.drawImage(ctx, background,128,96,32,32,px,y+h-3,32,32); }else if(direction == 'down') { - dstImage.drawImage(background,160,96,32,32,px,y-29,32,32); + core.drawImage(ctx, background,160,96,32,32,px,y-29,32,32); } } // 仿RM窗口皮肤 ↑ @@ -1045,7 +1063,7 @@ ui.prototype._drawTextContent_draw = function (ctx, tempCtx, content, config) { if (config.index >= config.blocks.length) return false; var block = config.blocks[config.index++]; if (block != null) { - ctx.drawImage(tempCtx.canvas, block.left, block.top, block.width, block.height, + core.drawImage(ctx, tempCtx.canvas, block.left, block.top, block.width, block.height, config.left + block.left + block.marginLeft, config.top + block.top + block.marginTop, block.width, block.height); } @@ -1283,18 +1301,14 @@ ui.prototype.drawTextBox = function(content, showAll) { ui.prototype._drawTextBox_drawImages = function (content) { return content.replace(/(\f|\\f)\[(.*?)]/g, function (text, sympol, str) { var ss = str.split(","); - if (ss.length!=3 && ss.length!=5 && ss.length!=9) return ""; - ss[0] = core.getMappedName(ss[0]); - var img = core.material.images.images[ss[0]]; - if (!img) return ""; // 绘制 if (ss.length==3) - core.drawImage('ui', img, parseFloat(ss[1]), parseFloat(ss[2])); + core.drawImage('ui', ss[0], parseFloat(ss[1]), parseFloat(ss[2])); else if (ss.length==5) - core.drawImage('ui', img, 0, 0, img.width, img.height, parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4])); + core.drawImage('ui', ss[0], parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4])); else if (ss.length==9 || ss.length==10) { if (ss.length==10) core.setAlpha('ui', parseFloat(ss[9])); - core.drawImage('ui', img, parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4]), parseFloat(ss[5]), parseFloat(ss[6]), parseFloat(ss[7]), parseFloat(ss[8])); + core.drawImage('ui', ss[0], parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4]), parseFloat(ss[5]), parseFloat(ss[6]), parseFloat(ss[7]), parseFloat(ss[8])); core.setAlpha('ui', 1); } return ""; diff --git a/libs/utils.js b/libs/utils.js index 7eaba683..96dc5b38 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -352,13 +352,13 @@ utils.prototype.splitImage = function (image, width, height) { width = width || 32; height = height || width; var canvas = document.createElement("canvas"); - var context = canvas.getContext("2d"); + var ctx = canvas.getContext("2d"); var ans = []; for (var j = 0; j < image.height; j += height) { for (var i = 0; i < image.width; i += width) { var w = Math.min(width, image.width - i), h = Math.min(height, image.height - j); canvas.width = w; canvas.height = h; - context.drawImage(image, i, j, w, h, 0, 0, w, h); + core.drawImage(ctx, image, i, j, w, h, 0, 0, w, h); var img = new Image(); img.src = canvas.toDataURL("image/png"); ans.push(img); diff --git a/project/functions.js b/project/functions.js index 313cbd28..220ffe03 100644 --- a/project/functions.js +++ b/project/functions.js @@ -1360,7 +1360,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = // 绘制下一个数据 var name = toDraw[index]; // 图片大小25x25 - ctx.drawImage(core.statusBar.icons[name], leftOffset, topOffset, 25, 25); + core.drawImage(ctx, core.statusBar.icons[name], leftOffset, topOffset, 25, 25); // 文字内容 var text = (core.statusBar[name] || {}).innerText || " "; // 斜体判定:如果不是纯数字和字母,斜体会非常难看,需要取消 diff --git a/v2.x-final更新.txt b/v2.x-final更新.txt index 1d0849d9..a66af87d 100644 --- a/v2.x-final更新.txt +++ b/v2.x-final更新.txt @@ -59,11 +59,11 @@ (已完成!) 右边框输入完后解析按钮高亮 (已完成!) 32x48的门 (已完成!) 难度分歧的图块(颜色,含SL界面) -装备同时加属性和比例 +(已完成!) 装备同时加属性和比例 (已完成!) removeMap和resumeMap 右键图块选择复制/粘贴事件 -showImage, drawImage等加上对称选项 - +(已完成!) showImage, drawImage,立绘等加上对称选项 +更多的图块blockly化 -------------