mirror of
https://gitee.com/nomat/lcc-ui-sorting-group-demo.git
synced 2025-12-27 00:58:16 +00:00
3.6.3同步修正
This commit is contained in:
@@ -125,7 +125,7 @@ UI.prototype.update = function() {
|
||||
}
|
||||
}
|
||||
|
||||
UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0, sortingLevel = 0){
|
||||
if (!node.activeInHierarchy) {
|
||||
return;
|
||||
}
|
||||
@@ -135,6 +135,9 @@ UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
const stencilEnterLevel = render && (render.stencilStage === _cocos_2d_renderer_stencil_manager__Stage.ENTER_LEVEL || render.stencilStage === _cocos_2d_renderer_stencil_manager__Stage.ENTER_LEVEL_INVERTED);
|
||||
const transform = uiProps.uiTransformComp;
|
||||
sortingPriority = (transform && transform._sortingEnabled) ? transform._sortingPriority : sortingPriority;
|
||||
if((transform && transform._sortingEnabled)){
|
||||
++sortingLevel;
|
||||
}
|
||||
|
||||
// Save opacity
|
||||
const parentOpacity = this._pOpacity;
|
||||
@@ -152,38 +155,49 @@ UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
|
||||
// Render assembler update logic
|
||||
if (render && render.enabledInHierarchy) {
|
||||
if(stencilEnterLevel){
|
||||
this.flushRendererCache();
|
||||
|
||||
render.fillBuffers(this);// for rendering
|
||||
|
||||
// Update cascaded opacity to vertex buffer
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
// HARD COUPLING
|
||||
updateOpacity(render.renderData, opacity);
|
||||
if(sortingLevel > 0){
|
||||
if(stencilEnterLevel){
|
||||
this.flushRendererCache();
|
||||
|
||||
render.fillBuffers(this);// for rendering
|
||||
|
||||
// Update cascaded opacity to vertex buffer
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
// HARD COUPLING
|
||||
updateOpacity(render.renderData, opacity);
|
||||
const buffer = render.renderData.getMeshBuffer();
|
||||
if (buffer) {
|
||||
buffer.setDirty();
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.rendererCache.push(render);
|
||||
render.renderPriority = sortingPriority;
|
||||
if(sortingPriority != 0){
|
||||
this.rendererOrder = true;
|
||||
}
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
render.renderOpacity = opacity;
|
||||
}else{
|
||||
render.renderOpacity = -1;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
render.fillBuffers(this);
|
||||
if(render.renderOpacity >= 0){
|
||||
updateOpacity(render.renderData, render.renderOpacity);
|
||||
const buffer = render.renderData.getMeshBuffer();
|
||||
if (buffer) {
|
||||
buffer.setDirty();
|
||||
}
|
||||
}
|
||||
}else{
|
||||
this.rendererCache.push(render);
|
||||
render.renderPriority = sortingPriority;
|
||||
if(sortingPriority != 0){
|
||||
this.rendererOrder = true;
|
||||
}
|
||||
if (this._opacityDirty && render && !render.useVertexOpacity && render.renderData && render.renderData.vertexCount > 0) {
|
||||
render.renderOpacity = opacity;
|
||||
}else{
|
||||
render.renderOpacity = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (children.length > 0 && !node._static) {
|
||||
for (let i = 0; i < children.length; ++i) {
|
||||
const child = children[i];
|
||||
this.walk(child, level, sortingPriority);
|
||||
this.walk(child, level, sortingPriority, sortingLevel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,5 +224,12 @@ UI.prototype.walk = function(node: Node, level = 0, sortingPriority = 0){
|
||||
}
|
||||
}
|
||||
|
||||
if((transform && transform._sortingEnabled)){
|
||||
--sortingLevel;
|
||||
if(sortingLevel <= 0){
|
||||
this.flushRendererCache();
|
||||
}
|
||||
}
|
||||
|
||||
level += 1;
|
||||
};
|
||||
|
||||
@@ -4,15 +4,11 @@
|
||||
*/
|
||||
export enum SortingLayer {
|
||||
|
||||
//-- 自定义,在此之上,小于 DEFAULT 的层级
|
||||
|
||||
/**
|
||||
* 默认层级,在没有应用排序的UI渲染上的默认层级 *不要修改此枚举*
|
||||
* 默认层级,不能删除和修改此枚举值
|
||||
*/
|
||||
DEFAULT = 0,
|
||||
|
||||
//-- 自定义,在此之下,大于 DEFAULT 的层级
|
||||
|
||||
|
||||
// 测试定义,可以直接移除
|
||||
TEST_LIST_ITEM = 1,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user