Magic_Game/Easy2D/Base/EScene.cpp

125 lines
2.2 KiB
C++
Raw Normal View History

#include "..\ebase.h"
#include "..\enodes.h"
2017-10-14 01:07:34 +08:00
#include "..\emsg.h"
2017-09-10 23:56:52 +08:00
e2d::EScene::~EScene()
2017-09-10 23:56:52 +08:00
{
clearAllChildren();
}
2017-10-14 01:07:34 +08:00
/*void e2d::EScene::_exec()
2017-09-10 23:56:52 +08:00
{
// 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--)
{
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
}
}
2017-10-14 01:07:34 +08:00
}*/
2017-09-10 23:56:52 +08:00
2017-10-13 11:42:36 +08:00
void e2d::EScene::_onRender()
2017-09-10 23:56:52 +08:00
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>нڵ<D0BD>
for (auto child : m_vChildren)
{
2017-10-13 11:42:36 +08:00
child->_onRender();
2017-09-10 23:56:52 +08:00
}
}
void e2d::EScene::onEnter()
2017-09-18 23:59:08 +08:00
{
}
void e2d::EScene::onExit()
2017-09-18 23:59:08 +08:00
{
}
2017-10-13 11:42:36 +08:00
void e2d::EScene::add(ENode * child, int zOrder /* = 0 */)
2017-09-10 23:56:52 +08:00
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵĽڵ<C4BD><DAB5>ǿ<EFBFBD>
2017-10-14 01:07:34 +08:00
ASSERT(child != nullptr, "Scene::add NULL pointer exception.");
// <20><><EFBFBD>Կ<EFBFBD>ָ<EFBFBD><D6B8>
if (child == nullptr) return;
2017-09-10 23:56:52 +08:00
// <20><><EFBFBD>ýڵ<C3BD><DAB5>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>
2017-10-14 01:07:34 +08:00
child->bindWithScene(this);
2017-09-10 23:56:52 +08:00
// <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;
}
}
}
}
2017-10-13 11:42:36 +08:00
bool e2d::EScene::del(ENode * child, bool autoRelease /* = true */)
2017-09-10 23:56:52 +08:00
{
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<ENode*>::iterator iter;
2017-09-10 23:56:52 +08:00
for (iter = m_vChildren.begin(); iter != m_vChildren.end(); iter++)
{
// <20>ҵ<EFBFBD><D2B5><EFBFBD>ͬ<EFBFBD>ڵ<EFBFBD>
if (*iter == child)
{
2017-10-13 11:42:36 +08:00
if (autoRelease) (*iter)->autoRelease();
2017-09-10 23:56:52 +08:00
// <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;
}
std::vector<e2d::ENode*>& e2d::EScene::getChildren()
{
return m_vChildren;
}
void e2d::EScene::clearAllChildren()
2017-09-10 23:56:52 +08:00
{
// <20><><EFBFBD>нڵ<D0BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD>һ
for (auto child : m_vChildren)
{
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();
2017-10-14 01:07:34 +08:00
}
void e2d::EScene::bindListener(EMouseListener * listener)
{
2017-10-14 10:02:15 +08:00
EMsgManager::bindListenerWith(listener, this);
2017-10-14 01:07:34 +08:00
}
void e2d::EScene::bindListener(EKeyboardListener * listener)
{
2017-10-14 10:02:15 +08:00
EMsgManager::bindListenerWith(listener, this);
2017-10-14 01:07:34 +08:00
}