fixed node transform

This commit is contained in:
Nomango 2018-07-13 01:59:04 +08:00
parent be45d21d06
commit f6d044def0
2 changed files with 53 additions and 57 deletions

View File

@ -90,11 +90,7 @@ void e2d::Node::_update()
{ {
if (_children.empty()) if (_children.empty())
{ {
if (_autoUpdate && !Game::getInstance()->isPaused()) _updateSelf();
{
this->onUpdate();
}
this->_fixedUpdate();
} }
else else
{ {
@ -117,21 +113,27 @@ void e2d::Node::_update()
} }
} }
if (_autoUpdate && !Game::getInstance()->isPaused()) _updateSelf();
{
this->onUpdate();
}
this->_fixedUpdate();
// 访问其他节点 // 访问其他节点
for (; i < _children.size(); ++i) for (; i < _children.size(); ++i)
_children[i]->_update(); _children[i]->_update();
} }
}
// 更新转换矩阵 void e2d::Node::_updateSelf()
{
if (_needTransform)
{
updateTransform(); updateTransform();
// 保留差别属性 CollisionManager::getInstance()->__updateCollider(&_collider);
_extrapolate = this->getProperty(); }
if (_autoUpdate && !Game::getInstance()->isPaused())
{
this->onUpdate();
}
this->_fixedUpdate();
} }
void e2d::Node::_render() void e2d::Node::_render()
@ -141,6 +143,11 @@ void e2d::Node::_render()
return; return;
} }
// 更新转换矩阵
updateTransform();
// 保留差别属性
_extrapolate = this->getProperty();
if (_children.empty()) if (_children.empty())
{ {
// 转换渲染器的二维矩阵 // 转换渲染器的二维矩阵
@ -217,46 +224,6 @@ void e2d::Node::updateTransform()
if (!_needTransform) if (!_needTransform)
return; return;
_updateSelfTransform();
CollisionManager::getInstance()->__updateCollider(&_collider);
if (_needTransform)
{
_updateSelfTransform();
}
// 为节点创建一个轮廓
ID2D1RectangleGeometry * rectGeo = nullptr;
ID2D1TransformedGeometry * transformedGeo = nullptr;
auto factory = Renderer::getFactory();
HRESULT hr = factory->CreateRectangleGeometry(
D2D1::RectF(0, 0, _width, _height),
&rectGeo
);
if (SUCCEEDED(hr))
{
factory->CreateTransformedGeometry(
rectGeo,
_finalMatri,
&transformedGeo
);
}
SafeRelease(rectGeo);
SafeRelease(_outline);
_outline = transformedGeo;
// 通知子节点进行转换
for (auto& child : _children)
{
child->_needTransform = true;
}
}
void e2d::Node::_updateSelfTransform()
{
_needTransform = false; _needTransform = false;
// 计算中心点坐标 // 计算中心点坐标
@ -288,6 +255,35 @@ void e2d::Node::_updateSelfTransform()
// 更新碰撞体 // 更新碰撞体
_collider.recreate(); _collider.recreate();
// 为节点创建一个轮廓
ID2D1RectangleGeometry * rectGeo = nullptr;
ID2D1TransformedGeometry * transformedGeo = nullptr;
auto factory = Renderer::getFactory();
HRESULT hr = factory->CreateRectangleGeometry(
D2D1::RectF(0, 0, _width, _height),
&rectGeo
);
if (SUCCEEDED(hr))
{
factory->CreateTransformedGeometry(
rectGeo,
_finalMatri,
&transformedGeo
);
}
SafeRelease(rectGeo);
SafeRelease(_outline);
_outline = transformedGeo;
// 通知子节点进行转换
for (auto& child : _children)
{
child->_needTransform = true;
}
} }
void e2d::Node::_sortChildren() void e2d::Node::_sortChildren()

View File

@ -394,6 +394,9 @@ protected:
// 更新节点 // 更新节点
void _update(); void _update();
// 更新自身
void _updateSelf();
// 渲染节点 // 渲染节点
void _render(); void _render();
@ -408,9 +411,6 @@ protected:
Scene * scene Scene * scene
); );
// 更新自身转换矩阵
void _updateSelfTransform();
// 子节点排序 // 子节点排序
void _sortChildren(); void _sortChildren();