optimize: Node
This commit is contained in:
		
							parent
							
								
									59ee637c4c
								
							
						
					
					
						commit
						f7dba39243
					
				|  | @ -831,9 +831,6 @@ namespace e2d | ||||||
| 			Scene * scene | 			Scene * scene | ||||||
| 		); | 		); | ||||||
| 
 | 
 | ||||||
| 		// 子节点排序
 |  | ||||||
| 		void SortChildren(); |  | ||||||
| 
 |  | ||||||
| 		// 更新转换矩阵
 | 		// 更新转换矩阵
 | ||||||
| 		void UpdateTransform(); | 		void UpdateTransform(); | ||||||
| 
 | 
 | ||||||
|  | @ -860,8 +857,8 @@ namespace e2d | ||||||
| 		int			order_; | 		int			order_; | ||||||
| 		bool		visible_; | 		bool		visible_; | ||||||
| 		bool		clip_enabled_; | 		bool		clip_enabled_; | ||||||
| 		bool		need_sort_; | 		bool		dirty_sort_; | ||||||
| 		bool		need_transform_; | 		bool		dirty_transform_; | ||||||
| 		bool		fixed_position_; | 		bool		fixed_position_; | ||||||
| 		Collider	collider_; | 		Collider	collider_; | ||||||
| 		Scene *		parent_scene_; | 		Scene *		parent_scene_; | ||||||
|  |  | ||||||
|  | @ -383,8 +383,6 @@ namespace e2d | ||||||
| 	// 路径
 | 	// 路径
 | ||||||
| 	class Path | 	class Path | ||||||
| 	{ | 	{ | ||||||
| 		friend class Game; |  | ||||||
| 
 |  | ||||||
| 	public: | 	public: | ||||||
| 		// 获取数据的默认保存路径
 | 		// 获取数据的默认保存路径
 | ||||||
| 		static const String& GetDataPath(); | 		static const String& GetDataPath(); | ||||||
|  |  | ||||||
|  | @ -36,8 +36,8 @@ e2d::Node::Node() | ||||||
| 	, parent_scene_(nullptr) | 	, parent_scene_(nullptr) | ||||||
| 	, hash_name_(0) | 	, hash_name_(0) | ||||||
| 	, clip_enabled_(false) | 	, clip_enabled_(false) | ||||||
| 	, need_sort_(false) | 	, dirty_sort_(false) | ||||||
| 	, need_transform_(false) | 	, dirty_transform_(false) | ||||||
| 	, fixed_position_(false) | 	, fixed_position_(false) | ||||||
| 	, collider_(this) | 	, collider_(this) | ||||||
| 	, border_(nullptr) | 	, border_(nullptr) | ||||||
|  | @ -122,7 +122,16 @@ void e2d::Node::Visit() | ||||||
| 	else | 	else | ||||||
| 	{ | 	{ | ||||||
| 		// 子节点排序
 | 		// 子节点排序
 | ||||||
| 		SortChildren(); | 		if (dirty_sort_) | ||||||
|  | 		{ | ||||||
|  | 			std::sort( | ||||||
|  | 				std::begin(children_), | ||||||
|  | 				std::end(children_), | ||||||
|  | 				[](Node * n1, Node * n2) { return n1->GetOrder() < n2->GetOrder(); } | ||||||
|  | 			); | ||||||
|  | 
 | ||||||
|  | 			dirty_sort_ = false; | ||||||
|  | 		} | ||||||
| 
 | 
 | ||||||
| 		size_t i; | 		size_t i; | ||||||
| 		for (i = 0; i < children_.size(); ++i) | 		for (i = 0; i < children_.size(); ++i) | ||||||
|  | @ -195,10 +204,10 @@ void e2d::Node::DrawCollider() | ||||||
| 
 | 
 | ||||||
| void e2d::Node::UpdateTransform() | void e2d::Node::UpdateTransform() | ||||||
| { | { | ||||||
| 	if (!need_transform_) | 	if (!dirty_transform_) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	need_transform_ = false; | 	dirty_transform_ = false; | ||||||
| 
 | 
 | ||||||
| 	// 计算锚点坐标
 | 	// 计算锚点坐标
 | ||||||
| 	D2D1_POINT_2F anchor = { size_.width * anchor_.x, size_.height * anchor_.y }; | 	D2D1_POINT_2F anchor = { size_.width * anchor_.x, size_.height * anchor_.y }; | ||||||
|  | @ -253,7 +262,7 @@ void e2d::Node::UpdateTransform() | ||||||
| 	// 通知子节点进行转换
 | 	// 通知子节点进行转换
 | ||||||
| 	for (const auto& child : children_) | 	for (const auto& child : children_) | ||||||
| 	{ | 	{ | ||||||
| 		child->need_transform_ = true; | 		child->dirty_transform_ = true; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// 更新碰撞体
 | 	// 更新碰撞体
 | ||||||
|  | @ -297,20 +306,6 @@ bool e2d::Node::Dispatch(const KeyEvent & e, bool handled) | ||||||
| 	return handled; | 	return handled; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::SortChildren() |  | ||||||
| { |  | ||||||
| 	if (need_sort_) |  | ||||||
| 	{ |  | ||||||
| 		std::sort( |  | ||||||
| 			std::begin(children_), |  | ||||||
| 			std::end(children_), |  | ||||||
| 			[](Node * n1, Node * n2) { return n1->GetOrder() < n2->GetOrder(); } |  | ||||||
| 		); |  | ||||||
| 
 |  | ||||||
| 		need_sort_ = false; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void e2d::Node::UpdateOpacity() | void e2d::Node::UpdateOpacity() | ||||||
| { | { | ||||||
| 	if (parent_) | 	if (parent_) | ||||||
|  | @ -491,7 +486,7 @@ void e2d::Node::SetOrder(int order) | ||||||
| 	order_ = order; | 	order_ = order; | ||||||
| 	if (parent_) | 	if (parent_) | ||||||
| 	{ | 	{ | ||||||
| 		parent_->need_sort_ = true; | 		parent_->dirty_sort_ = true; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -517,7 +512,7 @@ void e2d::Node::SetPos(float x, float y) | ||||||
| 
 | 
 | ||||||
| 	pos_.x = x; | 	pos_.x = x; | ||||||
| 	pos_.y = y; | 	pos_.y = y; | ||||||
| 	need_transform_ = true; | 	dirty_transform_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::SetPosFixed(bool fixed) | void e2d::Node::SetPosFixed(bool fixed) | ||||||
|  | @ -526,7 +521,7 @@ void e2d::Node::SetPosFixed(bool fixed) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	fixed_position_ = fixed; | 	fixed_position_ = fixed; | ||||||
| 	need_transform_ = true; | 	dirty_transform_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::Move(float x, float y) | void e2d::Node::Move(float x, float y) | ||||||
|  | @ -561,7 +556,7 @@ void e2d::Node::SetScale(float scale_x, float scale_y) | ||||||
| 
 | 
 | ||||||
| 	scale_.x = scale_x; | 	scale_.x = scale_x; | ||||||
| 	scale_.y = scale_y; | 	scale_.y = scale_y; | ||||||
| 	need_transform_ = true; | 	dirty_transform_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::SetSkewX(float skew_x) | void e2d::Node::SetSkewX(float skew_x) | ||||||
|  | @ -581,7 +576,7 @@ void e2d::Node::SetSkew(float skew_x, float skew_y) | ||||||
| 
 | 
 | ||||||
| 	skew_.x = skew_x; | 	skew_.x = skew_x; | ||||||
| 	skew_.y = skew_y; | 	skew_.y = skew_y; | ||||||
| 	need_transform_ = true; | 	dirty_transform_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::SetRotation(float angle) | void e2d::Node::SetRotation(float angle) | ||||||
|  | @ -590,7 +585,7 @@ void e2d::Node::SetRotation(float angle) | ||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	rotation_ = angle; | 	rotation_ = angle; | ||||||
| 	need_transform_ = true; | 	dirty_transform_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::SetOpacity(float opacity) | void e2d::Node::SetOpacity(float opacity) | ||||||
|  | @ -620,7 +615,7 @@ void e2d::Node::SetAnchor(float anchor_x, float anchor_y) | ||||||
| 
 | 
 | ||||||
| 	anchor_.x = std::min(std::max(anchor_x, 0.f), 1.f); | 	anchor_.x = std::min(std::max(anchor_x, 0.f), 1.f); | ||||||
| 	anchor_.y = std::min(std::max(anchor_y, 0.f), 1.f); | 	anchor_.y = std::min(std::max(anchor_y, 0.f), 1.f); | ||||||
| 	need_transform_ = true; | 	dirty_transform_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::SetWidth(float width) | void e2d::Node::SetWidth(float width) | ||||||
|  | @ -640,7 +635,7 @@ void e2d::Node::SetSize(float width, float height) | ||||||
| 
 | 
 | ||||||
| 	size_.width = width; | 	size_.width = width; | ||||||
| 	size_.height = height; | 	size_.height = height; | ||||||
| 	need_transform_ = true; | 	dirty_transform_ = true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void e2d::Node::SetSize(Size size) | void e2d::Node::SetSize(Size size) | ||||||
|  | @ -699,9 +694,9 @@ void e2d::Node::AddChild(Node * child, int order  /* = 0 */) | ||||||
| 		// 更新子节点透明度
 | 		// 更新子节点透明度
 | ||||||
| 		child->UpdateOpacity(); | 		child->UpdateOpacity(); | ||||||
| 		// 更新节点转换
 | 		// 更新节点转换
 | ||||||
| 		child->need_transform_ = true; | 		child->dirty_transform_ = true; | ||||||
| 		// 更新子节点排序
 | 		// 更新子节点排序
 | ||||||
| 		need_sort_ = true; | 		dirty_sort_ = true; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue