From b970002b4fd1f7bf819344cf926a5caf2bb71ab9 Mon Sep 17 00:00:00 2001 From: oc Date: Mon, 3 Dec 2018 21:56:17 +0800 Subject: [PATCH] \f drawImage in TextBox --- _server/editor_blockly.js | 2 +- docs/element.md | 1 + docs/event.md | 14 ++++++++++++++ libs/ui.js | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/_server/editor_blockly.js b/_server/editor_blockly.js index 2d81a4cc..c16c0a12 100644 --- a/_server/editor_blockly.js +++ b/_server/editor_blockly.js @@ -422,7 +422,7 @@ document.getElementById('blocklyDiv').onmousewheel = function(e){ var type = args.type; if (!type) return false; editor_blockly.id = id_; - codeAreaHL.setValue(input.value.replace(/\\r/g,'\\\\r')); + codeAreaHL.setValue(input.value.replace(/\\r/g,'\\\\r').replace(/\\f/,'\\\\f')); document.getElementById('entryType').value = type; editor_blockly.parse(); editor_blockly.show(); diff --git a/docs/element.md b/docs/element.md index fc633a07..254f8ad9 100644 --- a/docs/element.md +++ b/docs/element.md @@ -313,6 +313,7 @@ floorId指定的是目标楼层的唯一标识符(ID)。 - 使用`\b[...]`来制作对话框效果,如`\b[up,3,2]`。 - 使用`\r[...]`来动态修改局部文本的颜色,如`\r[red]`。 - 使用`${}`来计算一个表达式的值,如`${status:atk+status:def}`。 +- 使用`\f[...]`来同时插入一张立绘图,如`\f[1.png,100,200]`。 从V2.5.2开始,也允许绘制一张头像图在对话框中,只要通过`\t[1.png]`或`\t[标题,1.png]`的写法。 diff --git a/docs/event.md b/docs/event.md index f9d4e64a..7720332f 100644 --- a/docs/event.md +++ b/docs/event.md @@ -253,6 +253,20 @@ ] ``` +从V2.5.3以后,也可以使用`\f[...]`来同时绘制一张图片。 + +其基本写法是`\f[图片名,起始x像素,起始y像素]`,或者`\f[图片名,起始x像素,起始y像素,绘制宽度,绘制高度]`。 + +需要注意的是,这个图片是绘制在UI层上的,下一个事件执行时即会擦除;同时如果使用了\t的图标动画效果,重叠的地方也会被图标动画给覆盖掉。 + +``` js +"x,y": [ // 实际执行的事件列表 + "\t[勇士]\b[up,hero]\f[1.png,100,100]以(100,100)为左上角绘制1.png图片", + "\t[hero]\f[1.png,100,100]\f[2.png,300,300]同时绘制了两张图片", + "\f[1.png,100,100,300,300]也可以填写宽高,这样会把图片强制进行放缩到指定的宽高值" +] +``` + 另外值得一提的是,我们是可以在文字中计算一个表达式的值的。只需要将表达式用 `${ }`整个括起来就可以。 ``` js diff --git a/libs/ui.js b/libs/ui.js index ac5e4c93..938b29b7 100644 --- a/libs/ui.js +++ b/libs/ui.js @@ -500,6 +500,20 @@ ui.prototype.drawTextBox = function(content, showAll) { core.status.boxAnimateObjs = []; core.clearMap('ui'); + // drawImage + content = content.replace(/(\f|\\f)\[(.*?)]/g, function (text, sympol, str) { + var ss = str.split(","); + if (ss.length!=3 && ss.length!=5) return ""; + var img = core.material.images.images[ss[0]]; + if (!core.isset(img)) return ""; + // 绘制 + if (ss.length==3) + core.canvas.ui.drawImage(img, parseFloat(ss[1]), parseFloat(ss[2])); + else + core.canvas.ui.drawImage(img, 0, 0, img.width, img.height, parseFloat(ss[1]), parseFloat(ss[2]), parseFloat(ss[3]), parseFloat(ss[4])); + return ""; + }); + var globalFont = core.status.globalAttribute.font; var font = textfont + 'px '+globalFont; if (textAttribute.bold) font = "bold "+font;