cocos使用_xxxDirty屬性存儲xxx的值是否需要重新計算,並在需要的時候再重新進行計算,如:
void Node::setScaleY(float scaleY)
{
if (_scaleY == scaleY)
return;
_scaleY = scaleY;
//修改了屬性,變換矩陣需要重新計算,但此時僅修改標誌位
_transformUpdated = _transformDirty = _inverseDirty = true;
}
const Mat4& Node::getNodeToParentTransform() const
{
if (_transformDirty)
{
//...此時需要使用矩陣,重新計算矩陣
}
//...
//重置標誌位
_transformDirty = _additionalTransformDirty = false;
return _transform;
}
如果每次設置屬性都重新計算矩陣,在需要設置大量屬性時就會產生大量不必要的計算,而實際上變換矩陣一般只在渲染時用到,這樣的方式可以減少不必要的計算,節省性能。