物体身上的组件越多渲染性能越低

  • Creator 版本:2.0.9

  • 目标平台: web

  • 详细报错信息,包含调用堆栈:无

  • 重现方式:我的测试:2万个,随机移动的方块,方块身上挂有 Sprite组件,BlockInputEvent组件,自定义运动组件

  • 之前哪个版本是正常的 :

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :window

  • 编辑器之前是否有其它报错 :无

  • 出现概率:100%

  • 额外线索:
    我的组件的代码:

import { CompType } from “…/CompType”;

const { ccclass, property } = cc._decorator;
@ccclass
export default class CCCMoveComp extends cc.Component {
type: number = CompType.MOVE;
/**
* 速度
*/
@property
speed: number = 10;
dirXY = { x: 0, y: 0 };
speedX: number = 0;
speedY: number = 0;
setRandomXY() {
let randomDirX = Math.round(Math.random() * 1000) / 1000;
let randomDirY = Math.round(Math.random() * 1000) / 1000;
if (Math.random() > 0.5) {
randomDirX = -randomDirX;
}
if (Math.random() > 0.5) {
randomDirY = -randomDirY;
}
this.dirXY = { x: randomDirX, y: randomDirY };
}

// LIFE-CYCLE CALLBACKS:

// onLoad () {}

update(dt) {
    let moveComp:CCCMoveComp = this;
    let nodeComp = moveComp.node;
    let xy = moveComp.dirXY;
    let stepX = moveComp.speed * dt * xy.x;
    let edgeRight = cc.winSize.width / 2 - nodeComp.width / 2;
    let edgeLeft = -edgeRight;
    let nextStepX = nodeComp.x + stepX;
    let edgeUp = cc.winSize.height / 2 - nodeComp.height / 2;
    let edgeDown = -edgeUp;

    let stepY = moveComp.speed * dt * xy.y;
    let nextStepY = nodeComp.y + stepY;

    if (nextStepX <= edgeLeft) {
        nodeComp.x = edgeLeft;
        moveComp.setRandomXY();
    } else if (nextStepX >= edgeRight) {
        nodeComp.x = edgeRight;
        moveComp.setRandomXY();
    } else {
        nodeComp.x = nextStepX;


    }
    if (nextStepY <= edgeDown) {
        nodeComp.y = edgeDown;
        moveComp.setRandomXY();
    } else if (nextStepY >= edgeUp) {
        nodeComp.y = edgeUp;
        moveComp.setRandomXY();
    } else {
        nodeComp.y = nextStepY

    }
    // let data = JSON.stringify(this);
}

}
参考图:
当挂着Sprite和自定组件时:

当挂着 sprite ,自定义组件,BlockInputEvents 时

当挂着sprite,BlockInputEvent,没有挂运动(自定义)组件时

当挂着Sprite ,BlockInputEvent,Layaout组件时,没挂运动组件

当挂着sprite ,BlockInputEvent,Layaout ,运动组件时