uievent z

This commit is contained in:
oc 2019-05-31 22:52:58 +08:00
parent ef31d39bed
commit 07646a8491
4 changed files with 21 additions and 5 deletions

View File

@ -1840,6 +1840,7 @@ UI绘制事件。
- `alpha`不透明度必须是0到1之间的浮点数
- `align`:对齐方式,只能是`left`, `center`, `right`,分别代表左对齐,居中和右对齐
- `baseline`:基准线,只能是`top`, `middle`, `alphabetic`, `bottom`,分别代表顶部,居中,标准值和底部。
- `z`画布的z值必须是正整数。初始创建时画布的z值是135。请注意闪烁光标所在画布的z值永远比该画布大1。
### fillText绘制文本

View File

@ -22,6 +22,7 @@ HTML5魔塔是使用画布canvas来绘制存在若干个图层它们
- paint**[D]**绘图层主要用来进行绘图模式。z-index: 95)
- curtain色调层用来控制当前楼层的画面色调 (z-index: 125)
- image1\~50**[D]**图片层用来绘制图片等操作。z-index: 100+code, 101~150
- uievent**[D]**自定义UI绘制层用来进行自定义UI绘制等操作。z-index135可以通过事件设置该值
- uiUI层用来绘制一切UI窗口如剧情文本、怪物手册、楼传器、系统菜单等等 (z-index: 140)
- data数据层用来绘制一些顶层的或更新比较快的数据如左上角的提示战斗界面中数据的变化等等。 (z-index: 170)
@ -29,6 +30,8 @@ HTML5魔塔是使用画布canvas来绘制存在若干个图层它们
色调层的z-index是25ui层的z-index是140因此图片编号在1~24的将被色调层遮挡25~40的将被ui层遮挡41~50的将遮挡UI层。
uievent层为自定义UI绘制所在的层其z值初始是135可以通过事件设置自定义绘制的闪烁光标所在层的z值永远比该值大1。
### 动态创建canvas
从V2.5.3开始可以在H5样板中任意动态创建canvas并进行使用。

View File

@ -1917,13 +1917,13 @@ return code;
setAttribute_s
: '设置画布属性' '字体' EvalString? '填充样式' EvalString? Colour '边框样式' EvalString? Colour BGNL? '线宽度' EvalString? '不透明度' EvalString? '对齐' TextAlign_List '基准线' TextBaseline_List Newline
: '设置画布属性' '字体' EvalString? '填充样式' EvalString? Colour '边框样式' EvalString? Colour BGNL? '线宽度' EvalString? '不透明度' EvalString? '对齐' TextAlign_List '基准线' TextBaseline_List 'z值' EvalString? Newline
/* setAttribute_s
tooltip : setAttribute设置画布属性
helpUrl : https://h5mota.com/games/template/_docs/#/event?id=setAttribute%ef%bc%9a%e8%ae%be%e7%bd%ae%e7%94%bb%e5%b8%83%e5%b1%9e%e6%80%a7
colour : this.subColor
default : ["","",'rgba(255,255,255,1)',"",'rgba(255,255,255,1)',"","",null,null]
default : ["","",'rgba(255,255,255,1)',"",'rgba(255,255,255,1)',"","",null,null,""]
TextAlign_List_0 = TextAlign_List_0==='null'?'': ', "align": "'+TextAlign_List_0+'"';
TextBaseline_List_0 = TextBaseline_List_0==='null'?'': ', "baseline": "'+TextBaseline_List_0+'"';
var colorRe = MotaActionFunctions.pattern.colorRe;
@ -1949,7 +1949,11 @@ if (EvalString_4) {
if (isNaN(f) || f<0 || f>1) throw new Error('不透明度必须是0到1的浮点数或不填');
EvalString_4 = ', "alpha": '+EvalString_4;
}
var code = '{"type": "setAttribute"'+EvalString_0+EvalString_1+EvalString_2+EvalString_3+EvalString_4+TextAlign_List_0+TextBaseline_List_0+'},\n';
if (EvalString_5) {
if (!/^\d+$/.test(EvalString_5))throw new Error('z值必须是整数或不填');
EvalString_5 = ', "z": '+EvalString_5;
}
var code = '{"type": "setAttribute"'+EvalString_0+EvalString_1+EvalString_2+EvalString_3+EvalString_4+TextAlign_List_0+TextBaseline_List_0+EvalString_5+'},\n';
return code;
*/;
@ -3234,7 +3238,7 @@ ActionParser.prototype.parseAction = function() {
data.strokeStyle=this.Colour(data.strokeStyle);
this.next = MotaActionBlocks['setAttribute_s'].xmlText([
data.font,data.fillStyle,'rgba('+data.fillStyle+')',data.strokeStyle,'rgba('+data.strokeStyle+')',
data.lineWidth,data.alpha,data.align,data.baseline,this.next]);
data.lineWidth,data.alpha,data.align,data.baseline,data.z,this.next]);
break;
case "fillText": // 绘制一行文本
data.style = this.Colour(data.style);

View File

@ -301,6 +301,12 @@ ui.prototype._uievent_setAttribute = function (data) {
if (data.strokeStyle) this.setStrokeStyle('uievent', data.strokeStyle);
if (data.align) this.setTextAlign('uievent', data.align);
if (data.baseline) this.setTextBaseline('uievent', data.baseline);
if (data.z != null && main.mode != 'editor') {
var z = parseInt(data.z) || 135;
core.dymCanvas.uievent.canvas.style.zIndex = z;
if (core.dymCanvas._uievent_selector)
core.dymCanvas._uievent_selector.canvas.style.zIndex = z + 1;
}
}
////// 计算某段文字的宽度 //////
@ -613,7 +619,9 @@ ui.prototype._uievent_drawSelector = function (data) {
this._drawSelector('uievent', background, w, h, x, y);
return;
}
var ctx = core.createCanvas('_uievent_selector', x, y, w, h, 136);
var z = 136;
if (core.dymCanvas.uievent) z = (parseInt(core.dymCanvas.uievent.canvas.style.zIndex) || 135) + 1;
var ctx = core.createCanvas('_uievent_selector', x, y, w, h, z);
ctx.canvas.style.opacity = 0.8;
this._drawSelector(ctx, background, w, h);
}