fixed node transform
This commit is contained in:
		
							parent
							
								
									be45d21d06
								
							
						
					
					
						commit
						f6d044def0
					
				|  | @ -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() | ||||||
| 	updateTransform(); | { | ||||||
| 	// 保留差别属性
 | 	if (_needTransform) | ||||||
| 	_extrapolate = this->getProperty(); | 	{ | ||||||
|  | 		updateTransform(); | ||||||
|  | 		CollisionManager::getInstance()->__updateCollider(&_collider); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	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() | ||||||
|  |  | ||||||
|  | @ -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(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue