請問 addComponent 是做什麼用的? 新坑? 3.10版

bool Node::addComponent(Component *component)
{
// lazy alloc
if (!_componentContainer)
_componentContainer = new (std::nothrow) ComponentContainer(this);

// should enable schedule update, then all components can receive this call back
scheduleUpdate();

return _componentContainer->add(component);

}

可以看到使用後會 馬上加入schedule中

而用到最多的地方就是 NodeReader

void NodeReader::setPropsWithFlatBuffers(cocos2d::Node node,
const flatbuffers::Table
nodeOptions)
{

ComExtensionData* extensionData = ComExtensionData::create();
extensionData->setCustomProperty( customProperty );
extensionData->setActionTag( actionTag );
if( node->getComponent( ComExtensionData::COMPONENT_NAME ) )
{
node->removeComponent( ComExtensionData::COMPONENT_NAME );
}
node->addComponent( extensionData );

}

結果就是加的一堆schedule

void Scheduler::update(float dt)
{

DL_FOREACH_SAFE(_updates0List, entry, tmp)
{
    if ((! entry->paused) && (! entry->markedForDeletion))
    {
        entry->callback(dt);
    }
}

}

這邊 拉低效能

之前用3.5版還不會 最近升級3.10就變這樣

但是不了解addComponent是做什麼用的

該如何解?

参考unity3d的Component系统。

自己解

修正

Node.h

virtual bool addComponent(Component *component, bool enableScheduler = true);

Node.cpp

bool Node::addComponent( Component *component, bool enableScheduler )
{
// lazy alloc
if (!_componentContainer)
_componentContainer = new (std::nothrow) ComponentContainer(this);

if( enableScheduler )
{
    // should enable schedule update, then all components can receive this call back
    scheduleUpdate();
}

return _componentContainer->add(component);

}

然後在

cocos/editor-support/cocostudio 下 用到addComponent的地方都修改 第二個參數改傳false

因為cocotudio用到的compoent都沒在update中做事, 根本不需要scheduler

以上是我最小的修正 目前看起來沒報錯