| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | #include "..\easy2d.h"
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | #include <assert.h>
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Scene::Scene() | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-08 12:30:45 +08:00
										 |  |  |  | 	App::get()->m_pLoadingScene = this; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Scene::~Scene() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	clearAllChildren(); | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Scene::_exec() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// active <20><>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>ȡ<EFBFBD>ý<EFBFBD><C3BD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	bool active = true; | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD>ִ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƵĽڵ㣨<DAB5><E3A3A8>λ<EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	for (int i = int(m_vChildren.size()) - 1; i >= 0; i--) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		assert(m_vChildren[i]); | 
					
						
							|  |  |  |  | 		if (m_vChildren[i]->_exec(active))	// ִ<>нڵ<D0BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			active = false;					// <20><><EFBFBD>ӽڵ<D3BD>ȡ<EFBFBD>ý<EFBFBD><C3BD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD>־<EFBFBD><D6BE> false
 | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Scene::_onDraw() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нڵ<D0BD>
 | 
					
						
							|  |  |  |  | 	for (auto child : m_vChildren) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		assert(child); | 
					
						
							|  |  |  |  | 		child->_onDraw(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-18 23:59:08 +08:00
										 |  |  |  | void Scene::onEnter() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Scene::onExit() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | void Scene::add(Node * child, int zOrder) | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĽڵ<C4BD><DAB5>ǿ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	assert(child); | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>ýڵ<C3BD><DAB5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	child->setParentScene(this); | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD> z <20><>˳<EFBFBD><CBB3>
 | 
					
						
							|  |  |  |  | 	child->setZOrder(zOrder); | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | 
					
						
							|  |  |  |  | 	child->retain(); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// <20><> z <20><>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	size_t size = m_vChildren.size(); | 
					
						
							|  |  |  |  | 	for (unsigned i = 0; i <= size; i++) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		if (i == size) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			m_vChildren.push_back(child); | 
					
						
							|  |  |  |  | 			break; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 		else | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			auto temp = m_vChildren.at(i); | 
					
						
							|  |  |  |  | 			if (temp->getZOrder() > zOrder) | 
					
						
							|  |  |  |  | 			{ | 
					
						
							|  |  |  |  | 				m_vChildren.insert(m_vChildren.begin() + i, child); | 
					
						
							|  |  |  |  | 				break; | 
					
						
							|  |  |  |  | 			} | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | bool Scene::del(Node * child) | 
					
						
							|  |  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-09-27 17:56:28 +08:00
										 |  |  |  | 	if (child == nullptr) return false; | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 	// Ѱ<><D1B0><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD>ڵ<EFBFBD>
 | 
					
						
							|  |  |  |  | 	std::vector<Node*>::iterator iter; | 
					
						
							|  |  |  |  | 	for (iter = m_vChildren.begin(); iter != m_vChildren.end(); iter++) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							|  |  |  |  | 		// <20>ҵ<EFBFBD><D2B5><EFBFBD>ͬ<EFBFBD>ڵ<EFBFBD>
 | 
					
						
							|  |  |  |  | 		if (*iter == child) | 
					
						
							|  |  |  |  | 		{ | 
					
						
							|  |  |  |  | 			// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | 
					
						
							|  |  |  |  | 			(*iter)->release(); | 
					
						
							|  |  |  |  | 			// ȥ<><C8A5><EFBFBD>ýڵ<C3BD>
 | 
					
						
							|  |  |  |  | 			m_vChildren.erase(iter); | 
					
						
							|  |  |  |  | 			return true; | 
					
						
							|  |  |  |  | 		} | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	// δ<>ҵ<EFBFBD><D2B5>ýڵ㷵<DAB5><E3B7B5> false
 | 
					
						
							|  |  |  |  | 	return false; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | void Scene::clearAllChildren() | 
					
						
							|  |  |  |  | { | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>нڵ<D0BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
 | 
					
						
							|  |  |  |  | 	for (auto child : m_vChildren) | 
					
						
							|  |  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-10-05 01:14:45 +08:00
										 |  |  |  | 		child->autoRelease(); | 
					
						
							| 
									
										
										
										
											2017-09-10 23:56:52 +08:00
										 |  |  |  | 		child->release(); | 
					
						
							|  |  |  |  | 	} | 
					
						
							|  |  |  |  | 	// <20><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
					
						
							|  |  |  |  | 	m_vChildren.clear(); | 
					
						
							|  |  |  |  | } |