[]Laya api 中可能的bug [官方来看]
第一次接触layer在使用tiledmap的时候发行object层的物体无法通过zorder设置重新渲染景深,之前开过一个帖子没人鸟,自己动手处理了。
1.tiledmap中的MapLayer复写了Sprite的render方法,使用了自己的_showGridList顺序,这样在调整zorder时是调整不到的
之前官方是
Laya.timer.callLater(this._parent,this.updateZOrder);
我改完是
Laya.timer.callLater(this._parent,this._parent.updateZOrder);
最后在tile的MapLayer中复写了updateZOrder 方法,对显示对象进行2次排序ca
才解决问题
1.tiledmap中的MapLayer复写了Sprite的render方法,使用了自己的_showGridList顺序,这样在调整zorder时是调整不到的
__proto.render=function(context,x,y){2.core中Sprite的zorder的set方法中 有一行代码有疑似bug,麻烦官方帮忙确认
var childs=this._childs;
this._childs=this._showGridList;
_super.prototype.render.call(this,context,x,y);
this._childs=childs;
}
/**z排序,更改此值,则会按照值的大小对同一容器的所有对象重新排序。值越大,越靠上。默认为0,则根据添加顺序排序。*/
__getset(0,__proto,'zOrder',function(){
return this._zOrder;
},function(value){
if (this._zOrder !=value){
if(this.name.length > 0){
console.debug("zOrder:"+this.name+" order:"+value);
}
this._zOrder=value;
this.conchModel && this.conchModel.setZOrder && this.conchModel.setZOrder(value);
if (this._parent){
value && this._parent._set$P("hasZorder",true);
Laya.timer.callLater(this._parent,[b]this._parent.updateZOrder[/b]);//Laya.timer.callLater(this._parent,this.updateZOrder);
}
}
});
之前官方是
Laya.timer.callLater(this._parent,this.updateZOrder);
我改完是
Laya.timer.callLater(this._parent,this._parent.updateZOrder);
最后在tile的MapLayer中复写了updateZOrder 方法,对显示对象进行2次排序ca
才解决问题
/**
* 覆盖父类的updateZOrder方法,先对自己的显示对象进行排序
*/
__proto.updateZOrder=function(){
var array = this._showGridList;
//遍历所有元素,根据zOrder排序
if (!array || array.length < 2)return false;
var i=1,j=0,len=array.length,key=NaN,c;
while (i < len){
j=i;
c=array[j];
key=array[j]._zOrder;
while (--j >-1){
if (array[j]._zOrder > key)array[j+1]=array[j];
else break ;
}
array[j+1]=c;
i++;
};
_super.prototype.updateZOrder.call();
}
没有找到相关结果
已邀请:
要回复问题请先登录
1 个回复
creepbug
赞同来自: