From c8e8a3868521f88b7282fb36377d68e62a3a5825 Mon Sep 17 00:00:00 2001 From: Nomango <569629550@qq.com> Date: Sat, 7 Jul 2018 11:00:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86Config=E9=85=8D=E7=BD=AE=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=94=B9=E4=B8=BA=E6=8C=87=E9=92=88=E4=BC=A0=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/Base/Game.cpp | 24 ++++++++++++++++-------- core/Common/Scene.cpp | 2 +- core/Manager/ColliderManager.cpp | 2 +- core/Tool/Path.cpp | 4 ++-- core/e2dbase.h | 6 +++--- core/e2dcommon.h | 3 ++- 6 files changed, 25 insertions(+), 16 deletions(-) diff --git a/core/Base/Game.cpp b/core/Base/Game.cpp index 67e9998b..76a14f0d 100644 --- a/core/Base/Game.cpp +++ b/core/Base/Game.cpp @@ -9,13 +9,15 @@ e2d::Game * e2d::Game::_instance = nullptr; e2d::Game::Game() : _ended(false) , _paused(false) - , _config() + , _config(nullptr) { CoInitialize(nullptr); } e2d::Game::~Game() { + GC::safeRelease(_config); + CoUninitialize(); } @@ -65,10 +67,9 @@ void e2d::Game::start(bool cleanup) // 判断是否达到了刷新状态 if (Time::__isReady()) { - // 更新配置 - if (_config._unconfigured) + if (_config->_unconfigured) { - _config._update(); + _config->_update(); } input->update(); // 获取用户输入 @@ -115,14 +116,21 @@ bool e2d::Game::isPaused() return _paused; } -void e2d::Game::setConfig(const Config& config) +void e2d::Game::setConfig(Config* config) { - _config = config; - _config._unconfigured = true; + if (config && _config != config) + { + GC::release(_config); + _config = config; + _config->_unconfigured = true; + GC::retain(_config); + } } -e2d::Config e2d::Game::getConfig() const +e2d::Config* e2d::Game::getConfig() { + if (!_config) + _config = new (e2d::autorelease) Config(); return _config; } diff --git a/core/Common/Scene.cpp b/core/Common/Scene.cpp index 0ccc1bc4..8b79c199 100644 --- a/core/Common/Scene.cpp +++ b/core/Common/Scene.cpp @@ -20,7 +20,7 @@ void e2d::Scene::_render() { _root->_render(); - if (Game::getInstance()->getConfig().isColliderVisible()) + if (Game::getInstance()->getConfig()->isColliderVisible()) { // 恢复矩阵转换 Renderer::getInstance()->getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity()); diff --git a/core/Manager/ColliderManager.cpp b/core/Manager/ColliderManager.cpp index e6940626..3fddbbd3 100644 --- a/core/Manager/ColliderManager.cpp +++ b/core/Manager/ColliderManager.cpp @@ -43,7 +43,7 @@ void e2d::ColliderManager::clearAll() void e2d::ColliderManager::__updateCollider(e2d::Collider * pActiveCollider) { // 判断碰撞监听是否打开 - if (!Game::getInstance()->getConfig().isCollisionEnabled()) + if (!Game::getInstance()->getConfig()->isCollisionEnabled()) return; Node* pActiveNode = pActiveCollider->_parentNode; diff --git a/core/Tool/Path.cpp b/core/Tool/Path.cpp index 1e328c26..f352359a 100644 --- a/core/Tool/Path.cpp +++ b/core/Tool/Path.cpp @@ -33,7 +33,7 @@ e2d::String e2d::Path::getDataPath() { // 设置数据的保存路径 String localAppDataPath = Path::getLocalAppDataPath(); - String gameName = Game::getInstance()->getConfig().getGameName(); + String gameName = Game::getInstance()->getConfig()->getGameName(); if (!localAppDataPath.isEmpty() && !gameName.isEmpty()) { _dataPath = localAppDataPath + L"\\Easy2DGameData\\" << gameName << L"\\"; @@ -54,7 +54,7 @@ e2d::String e2d::Path::getTempPath() { // 设置临时文件保存路径 wchar_t path[_MAX_PATH]; - String gameName = Game::getInstance()->getConfig().getGameName(); + String gameName = Game::getInstance()->getConfig()->getGameName(); if (0 != ::GetTempPath(_MAX_PATH, path) && !gameName.isEmpty()) { diff --git a/core/e2dbase.h b/core/e2dbase.h index 1dab00b2..12f652a5 100644 --- a/core/e2dbase.h +++ b/core/e2dbase.h @@ -42,11 +42,11 @@ public: // 修改游戏配置 void setConfig( - const Config& config + Config* config ); // 获取游戏配置 - Config getConfig() const; + Config* getConfig(); private: Game(); @@ -58,7 +58,7 @@ private: private: bool _ended; bool _paused; - Config _config; + Config* _config; static Game * _instance; }; diff --git a/core/e2dcommon.h b/core/e2dcommon.h index f1f3f5cc..a1d23d4c 100644 --- a/core/e2dcommon.h +++ b/core/e2dcommon.h @@ -734,7 +734,8 @@ protected: class Game; // 游戏配置 -class Config +class Config : + public Ref { friend class Game;