删除场景栈
This commit is contained in:
parent
997aca7e6e
commit
8984817dd8
|
|
@ -38,7 +38,6 @@ e2d::GC::GC()
|
||||||
e2d::GC::~GC()
|
e2d::GC::~GC()
|
||||||
{
|
{
|
||||||
// 删除所有对象
|
// 删除所有对象
|
||||||
Game::GetInstance()->ClearAllScenes();
|
|
||||||
Timer::GetInstance()->ClearAllTasks();
|
Timer::GetInstance()->ClearAllTasks();
|
||||||
ActionManager::GetInstance()->ClearAll();
|
ActionManager::GetInstance()->ClearAll();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ e2d::Game::Game()
|
||||||
, curr_scene_(nullptr)
|
, curr_scene_(nullptr)
|
||||||
, next_scene_(nullptr)
|
, next_scene_(nullptr)
|
||||||
, transition_(nullptr)
|
, transition_(nullptr)
|
||||||
, scenes_()
|
|
||||||
{
|
{
|
||||||
::CoInitialize(nullptr);
|
::CoInitialize(nullptr);
|
||||||
}
|
}
|
||||||
|
|
@ -119,7 +118,7 @@ void e2d::Game::Quit()
|
||||||
quit_ = true;
|
quit_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Game::PushScene(Scene * scene, bool save_current_scene)
|
void e2d::Game::EnterScene(Scene * scene)
|
||||||
{
|
{
|
||||||
if (!scene)
|
if (!scene)
|
||||||
return;
|
return;
|
||||||
|
|
@ -128,19 +127,14 @@ void e2d::Game::PushScene(Scene * scene, bool save_current_scene)
|
||||||
if (next_scene_) next_scene_->Release();
|
if (next_scene_) next_scene_->Release();
|
||||||
next_scene_ = scene;
|
next_scene_ = scene;
|
||||||
next_scene_->Retain();
|
next_scene_->Retain();
|
||||||
|
|
||||||
if (save_current_scene && curr_scene_)
|
|
||||||
{
|
|
||||||
scenes_.push(curr_scene_);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Game::PushScene(Transition * transition, bool save_current_scene)
|
void e2d::Game::EnterScene(Transition * transition)
|
||||||
{
|
{
|
||||||
if (!transition)
|
if (!transition)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PushScene(transition->in_scene_, save_current_scene);
|
EnterScene(transition->in_scene_);
|
||||||
|
|
||||||
if (transition_)
|
if (transition_)
|
||||||
{
|
{
|
||||||
|
|
@ -159,72 +153,11 @@ void e2d::Game::PushScene(Transition * transition, bool save_current_scene)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Scene* e2d::Game::PopScene()
|
|
||||||
{
|
|
||||||
// 栈为空时,调用返回场景函数失败
|
|
||||||
if (scenes_.size() == 0)
|
|
||||||
{
|
|
||||||
WARN("Scene stack Is empty!");
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
next_scene_ = scenes_.top();
|
|
||||||
next_scene_->Release();
|
|
||||||
scenes_.pop();
|
|
||||||
|
|
||||||
return next_scene_;
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::Scene * e2d::Game::PopScene(Transition * transition)
|
|
||||||
{
|
|
||||||
if (!transition)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
auto scene = PopScene();
|
|
||||||
if (scene)
|
|
||||||
{
|
|
||||||
if (transition_)
|
|
||||||
{
|
|
||||||
transition_->Stop();
|
|
||||||
transition_->Release();
|
|
||||||
}
|
|
||||||
transition_ = transition;
|
|
||||||
transition_->Retain();
|
|
||||||
|
|
||||||
transition_->in_scene_ = scene;
|
|
||||||
transition_->in_scene_->Retain();
|
|
||||||
|
|
||||||
// 初始化场景切换动画
|
|
||||||
if (!transition_->Init(this, curr_scene_))
|
|
||||||
{
|
|
||||||
WARN("Transition initialize failed!");
|
|
||||||
transition_->Release();
|
|
||||||
transition_ = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return scene;
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::Game::ClearAllScenes()
|
|
||||||
{
|
|
||||||
while (!scenes_.empty())
|
|
||||||
{
|
|
||||||
scenes_.top()->Release();
|
|
||||||
scenes_.pop();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::Scene * e2d::Game::GetCurrentScene()
|
e2d::Scene * e2d::Game::GetCurrentScene()
|
||||||
{
|
{
|
||||||
return curr_scene_;
|
return curr_scene_;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::stack<e2d::Scene*>& e2d::Game::GetSceneStack()
|
|
||||||
{
|
|
||||||
return scenes_;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool e2d::Game::IsTransitioning() const
|
bool e2d::Game::IsTransitioning() const
|
||||||
{
|
{
|
||||||
return transition_ != nullptr;
|
return transition_ != nullptr;
|
||||||
|
|
@ -252,10 +185,7 @@ void e2d::Game::UpdateScene()
|
||||||
if (curr_scene_)
|
if (curr_scene_)
|
||||||
{
|
{
|
||||||
curr_scene_->OnExit();
|
curr_scene_->OnExit();
|
||||||
if (scenes_.empty() || scenes_.top() != curr_scene_)
|
curr_scene_->Release();
|
||||||
{
|
|
||||||
curr_scene_->Release();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
next_scene_->OnEnter();
|
next_scene_->OnEnter();
|
||||||
|
|
|
||||||
|
|
@ -118,9 +118,9 @@ void e2d::Renderer::EndDraw()
|
||||||
|
|
||||||
if (fps_text_layout_)
|
if (fps_text_layout_)
|
||||||
{
|
{
|
||||||
render_target_->SetTransform(D2D1::Matrix3x2F::Identity());
|
GetRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity());
|
||||||
solid_brush_->SetOpacity(1.0f);
|
GetSolidBrush()->SetOpacity(1.0f);
|
||||||
text_renderer_->SetTextStyle(
|
GetTextRenderer()->SetTextStyle(
|
||||||
D2D1::ColorF(D2D1::ColorF::White),
|
D2D1::ColorF(D2D1::ColorF::White),
|
||||||
TRUE,
|
TRUE,
|
||||||
D2D1::ColorF(D2D1::ColorF::Black, 0.4f),
|
D2D1::ColorF(D2D1::ColorF::Black, 0.4f),
|
||||||
|
|
@ -134,7 +134,6 @@ void e2d::Renderer::EndDraw()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ÖÕÖ¹äÖȾ
|
|
||||||
HRESULT hr = render_target_->EndDraw();
|
HRESULT hr = render_target_->EndDraw();
|
||||||
|
|
||||||
if (hr == D2DERR_RECREATE_TARGET)
|
if (hr == D2DERR_RECREATE_TARGET)
|
||||||
|
|
@ -150,10 +149,7 @@ void e2d::Renderer::EndDraw()
|
||||||
SafeRelease(render_target_);
|
SafeRelease(render_target_);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(hr))
|
ThrowIfFailed(hr);
|
||||||
{
|
|
||||||
throw SystemException("Device loss recovery failed");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::E2DTextRenderer * e2d::Renderer::GetTextRenderer()
|
e2d::E2DTextRenderer * e2d::Renderer::GetTextRenderer()
|
||||||
|
|
|
||||||
|
|
@ -345,34 +345,18 @@ public:
|
||||||
bool IsPaused();
|
bool IsPaused();
|
||||||
|
|
||||||
// 场景入栈
|
// 场景入栈
|
||||||
void PushScene(
|
void EnterScene(
|
||||||
Scene * scene, /* 下一个场景的指针 */
|
Scene * scene /* 下一个场景的指针 */
|
||||||
bool save_current_scene = true /* 是否保存当前场景 */
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// 场景入栈
|
// 场景入栈
|
||||||
void PushScene(
|
void EnterScene(
|
||||||
Transition * transition, /* 场景动画 */
|
Transition * transition /* 场景动画 */
|
||||||
bool save_current_scene = true /* 是否保存当前场景 */
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// 场景出栈
|
|
||||||
Scene* PopScene();
|
|
||||||
|
|
||||||
// 场景出栈
|
|
||||||
Scene* PopScene(
|
|
||||||
Transition * transition /* 场景动画 */
|
|
||||||
);
|
|
||||||
|
|
||||||
// 清空保存的所有场景
|
|
||||||
void ClearAllScenes();
|
|
||||||
|
|
||||||
// 获取当前场景
|
// 获取当前场景
|
||||||
Scene * GetCurrentScene();
|
Scene * GetCurrentScene();
|
||||||
|
|
||||||
// 获取场景栈
|
|
||||||
const std::stack<Scene*>& GetSceneStack();
|
|
||||||
|
|
||||||
// 是否正在进行场景动画
|
// 是否正在进行场景动画
|
||||||
bool IsTransitioning() const;
|
bool IsTransitioning() const;
|
||||||
|
|
||||||
|
|
@ -395,7 +379,6 @@ private:
|
||||||
Scene* curr_scene_;
|
Scene* curr_scene_;
|
||||||
Scene* next_scene_;
|
Scene* next_scene_;
|
||||||
Transition* transition_;
|
Transition* transition_;
|
||||||
std::stack<Scene*> scenes_;
|
|
||||||
|
|
||||||
static Game * instance_;
|
static Game * instance_;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue