背包降dc

背包降dc的问题
好像我直接创建1000个icon+label的dc也很低啊为什么会有那么多人需要优化这个的dc?


/*

  • @Author: hzxOnlineOk

  • @Date: 2024-11-07 10:09:19

  • @LastEditors: Please set LastEditors

  • @LastEditTime: 2024-11-07 14:46:15

  • @Description: 请填写简介

*/

import { _decorator, Color, Component, Label, Layout, Node, Sprite, SpriteFrame, UITransform } from ‘cc’;

const { ccclass, property } = _decorator;

/***

*/

@ccclass(‘test’)

export class test extends Component {

@property(SpriteFrame)

spriteFrame: SpriteFrame = null;

@property(SpriteFrame)

spriteFrame1: SpriteFrame = null;

images // 图片父节点

labels // 文字父节点

itemCount = 1000 // item数量

start() {

    this.decDC();

    // this.noDecDC()

}

/**

 * 创建一个item

 * @param data 数据 现在假设label+image

 */

createrItem(data: any) {

    let item = new Node("item");

    let label = new Node("label");

    label.addComponent(Label).string = data.label;

    label.getComponent(Label).color = Color.BLACK;

    label.getComponent(Label).cacheMode = Label.CacheMode.BITMAP;

    let image = new Node("image");

    image.addComponent(Sprite).spriteFrame = Math.random() > 0.5 ? this.spriteFrame : this.spriteFrame1//data.image;

    this.images.addChild(image);

    this.labels.addChild(label);

    image.getComponent(UITransform).setContentSize(130, 50)

    item.addComponent(UITransform).setContentSize(130, 50)

    label.setPosition(0, 30 - data.position * 55 - 55);

    // label.setPosition(0, image.getComponent(UITransform).height);

    // this.node.addChild(item);

}

/**

 * 创建一个item

 * @param data 数据 现在假设label+image

 */

createrItem1(data: any) {

    let item = new Node("item");

    let label = new Node("label");

    label.addComponent(Label).string = data.label;

    label.getComponent(Label).color = Color.BLACK;

    label.getComponent(Label).cacheMode = Label.CacheMode.BITMAP;

    let image = new Node("image");

    image.addComponent(Sprite).spriteFrame = this.spriteFrame//data.image;

    item.addChild(image);

    item.addChild(label);

    image.getComponent(UITransform).setContentSize(130, 50)

    item.addComponent(UITransform).setContentSize(130, 50)

    this.node.addChild(item);

}

noDecDC() {

    for (let i = 0; i < this.itemCount; i++) {

        this.createrItem1({ label: "123", image: this.spriteFrame, position: i });

    }

}

decDC() {

    this.node.getComponent(Layout).enabled = false;

    let labels = new Node("labels");

    let images = new Node("images");

    images.addComponent(Layout);

    images.getComponent(Layout).type = Layout.Type.VERTICAL;

    images.getComponent(Layout).paddingTop = 50

    images.getComponent(Layout).spacingY = 5

    this.node.addChild(images);

    this.node.addChild(labels);

    this.images = images;

    this.labels = labels;

    for (let i = 0; i < this.itemCount; i++) {

        this.createrItem({ label: "123", image: this.spriteFrame, position: i });

    }

    this.node.getComponent(UITransform).setContentSize(130, (50 + 5) * this.itemCount);

}

update(deltaTime: number) {

}

}

你说得对,这也是我虚拟列表分层渲染的办法
Cocos Store

不分层的dc也是9哇

有动态合批吧,总的来说就是你的应用场景还不够复杂,复杂的时候label不断打断合批,drawcall就很高

咦看错了,哈哈,确实是分层才是9,不分层1000多