optimize: Node
This commit is contained in:
		
							parent
							
								
									59ee637c4c
								
							
						
					
					
						commit
						f7dba39243
					
				|  | @ -831,9 +831,6 @@ namespace e2d | |||
| 			Scene * scene | ||||
| 		); | ||||
| 
 | ||||
| 		// 子节点排序
 | ||||
| 		void SortChildren(); | ||||
| 
 | ||||
| 		// 更新转换矩阵
 | ||||
| 		void UpdateTransform(); | ||||
| 
 | ||||
|  | @ -860,8 +857,8 @@ namespace e2d | |||
| 		int			order_; | ||||
| 		bool		visible_; | ||||
| 		bool		clip_enabled_; | ||||
| 		bool		need_sort_; | ||||
| 		bool		need_transform_; | ||||
| 		bool		dirty_sort_; | ||||
| 		bool		dirty_transform_; | ||||
| 		bool		fixed_position_; | ||||
| 		Collider	collider_; | ||||
| 		Scene *		parent_scene_; | ||||
|  |  | |||
|  | @ -383,8 +383,6 @@ namespace e2d | |||
| 	// 路径
 | ||||
| 	class Path | ||||
| 	{ | ||||
| 		friend class Game; | ||||
| 
 | ||||
| 	public: | ||||
| 		// 获取数据的默认保存路径
 | ||||
| 		static const String& GetDataPath(); | ||||
|  |  | |||
|  | @ -36,8 +36,8 @@ e2d::Node::Node() | |||
| 	, parent_scene_(nullptr) | ||||
| 	, hash_name_(0) | ||||
| 	, clip_enabled_(false) | ||||
| 	, need_sort_(false) | ||||
| 	, need_transform_(false) | ||||
| 	, dirty_sort_(false) | ||||
| 	, dirty_transform_(false) | ||||
| 	, fixed_position_(false) | ||||
| 	, collider_(this) | ||||
| 	, border_(nullptr) | ||||
|  | @ -122,7 +122,16 @@ void e2d::Node::Visit() | |||
| 	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; | ||||
| 		for (i = 0; i < children_.size(); ++i) | ||||
|  | @ -195,10 +204,10 @@ void e2d::Node::DrawCollider() | |||
| 
 | ||||
| void e2d::Node::UpdateTransform() | ||||
| { | ||||
| 	if (!need_transform_) | ||||
| 	if (!dirty_transform_) | ||||
| 		return; | ||||
| 
 | ||||
| 	need_transform_ = false; | ||||
| 	dirty_transform_ = false; | ||||
| 
 | ||||
| 	// 计算锚点坐标
 | ||||
| 	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_) | ||||
| 	{ | ||||
| 		child->need_transform_ = true; | ||||
| 		child->dirty_transform_ = true; | ||||
| 	} | ||||
| 
 | ||||
| 	// 更新碰撞体
 | ||||
|  | @ -297,20 +306,6 @@ bool e2d::Node::Dispatch(const KeyEvent & e, bool 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() | ||||
| { | ||||
| 	if (parent_) | ||||
|  | @ -491,7 +486,7 @@ void e2d::Node::SetOrder(int order) | |||
| 	order_ = order; | ||||
| 	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_.y = y; | ||||
| 	need_transform_ = true; | ||||
| 	dirty_transform_ = true; | ||||
| } | ||||
| 
 | ||||
| void e2d::Node::SetPosFixed(bool fixed) | ||||
|  | @ -526,7 +521,7 @@ void e2d::Node::SetPosFixed(bool fixed) | |||
| 		return; | ||||
| 
 | ||||
| 	fixed_position_ = fixed; | ||||
| 	need_transform_ = true; | ||||
| 	dirty_transform_ = true; | ||||
| } | ||||
| 
 | ||||
| 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_.y = scale_y; | ||||
| 	need_transform_ = true; | ||||
| 	dirty_transform_ = true; | ||||
| } | ||||
| 
 | ||||
| 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_.y = skew_y; | ||||
| 	need_transform_ = true; | ||||
| 	dirty_transform_ = true; | ||||
| } | ||||
| 
 | ||||
| void e2d::Node::SetRotation(float angle) | ||||
|  | @ -590,7 +585,7 @@ void e2d::Node::SetRotation(float angle) | |||
| 		return; | ||||
| 
 | ||||
| 	rotation_ = angle; | ||||
| 	need_transform_ = true; | ||||
| 	dirty_transform_ = true; | ||||
| } | ||||
| 
 | ||||
| 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_.y = std::min(std::max(anchor_y, 0.f), 1.f); | ||||
| 	need_transform_ = true; | ||||
| 	dirty_transform_ = true; | ||||
| } | ||||
| 
 | ||||
| void e2d::Node::SetWidth(float width) | ||||
|  | @ -640,7 +635,7 @@ void e2d::Node::SetSize(float width, float height) | |||
| 
 | ||||
| 	size_.width = width; | ||||
| 	size_.height = height; | ||||
| 	need_transform_ = true; | ||||
| 	dirty_transform_ = true; | ||||
| } | ||||
| 
 | ||||
| void e2d::Node::SetSize(Size size) | ||||
|  | @ -699,9 +694,9 @@ void e2d::Node::AddChild(Node * child, int order  /* = 0 */) | |||
| 		// 更新子节点透明度
 | ||||
| 		child->UpdateOpacity(); | ||||
| 		// 更新节点转换
 | ||||
| 		child->need_transform_ = true; | ||||
| 		child->dirty_transform_ = true; | ||||
| 		// 更新子节点排序
 | ||||
| 		need_sort_ = true; | ||||
| 		dirty_sort_ = true; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue