增加Time时间点和Duration时间段
This commit is contained in:
parent
e16249b1a4
commit
7d17c3b225
|
|
@ -24,7 +24,7 @@ bool e2d::Action::isRunning()
|
||||||
void e2d::Action::resume()
|
void e2d::Action::resume()
|
||||||
{
|
{
|
||||||
_running = true;
|
_running = true;
|
||||||
_last = Time::getTotalTime();
|
_last = Game::getInstance()->getTotalTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Action::pause()
|
void e2d::Action::pause()
|
||||||
|
|
@ -56,7 +56,7 @@ void e2d::Action::reset()
|
||||||
{
|
{
|
||||||
_initialized = false;
|
_initialized = false;
|
||||||
_done = false;
|
_done = false;
|
||||||
_last = Time::getTotalTime();
|
_last = Game::getInstance()->getTotalTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Action::_isDone()
|
bool e2d::Action::_isDone()
|
||||||
|
|
@ -74,7 +74,7 @@ void e2d::Action::_startWithTarget(Node* target)
|
||||||
void e2d::Action::_init()
|
void e2d::Action::_init()
|
||||||
{
|
{
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
_last = Time::getTotalTime();
|
_last = Game::getInstance()->getTotalTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Action::_update()
|
void e2d::Action::_update()
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ void e2d::Animate::_update()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while ((Time::getTotalTime() - _last) >= _animation->getInterval())
|
while ((Game::getInstance()->getTotalTime() - _last) >= _animation->getInterval())
|
||||||
{
|
{
|
||||||
auto& frames = _animation->getFrames();
|
auto& frames = _animation->getFrames();
|
||||||
auto target = dynamic_cast<Sprite*>(_target);
|
auto target = dynamic_cast<Sprite*>(_target);
|
||||||
|
|
@ -80,7 +80,7 @@ void e2d::Animate::_update()
|
||||||
void e2d::Animate::_resetTime()
|
void e2d::Animate::_resetTime()
|
||||||
{
|
{
|
||||||
Action::_resetTime();
|
Action::_resetTime();
|
||||||
_last = Time::getTotalTime();
|
_last = Game::getInstance()->getTotalTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Animate::reset()
|
void e2d::Animate::reset()
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ void e2d::Delay::_update()
|
||||||
{
|
{
|
||||||
Action::_update();
|
Action::_update();
|
||||||
|
|
||||||
_delta = Time::getTotalTime() - _last;
|
_delta = Game::getInstance()->getTotalTime() - _last;
|
||||||
|
|
||||||
if (_delta >= _delay)
|
if (_delta >= _delay)
|
||||||
{
|
{
|
||||||
|
|
@ -42,5 +42,5 @@ void e2d::Delay::_update()
|
||||||
void e2d::Delay::_resetTime()
|
void e2d::Delay::_resetTime()
|
||||||
{
|
{
|
||||||
Action::_resetTime();
|
Action::_resetTime();
|
||||||
_last = Time::getTotalTime() - _delta;
|
_last = Game::getInstance()->getTotalTime() - _delta;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ void e2d::FiniteTimeAction::_update()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_delta = std::min((Time::getTotalTime() - _last) / _duration, 1.0);
|
_delta = std::min((Game::getInstance()->getTotalTime() - _last) / _duration, 1.0);
|
||||||
|
|
||||||
if (_delta >= 1)
|
if (_delta >= 1)
|
||||||
{
|
{
|
||||||
|
|
@ -40,5 +40,5 @@ void e2d::FiniteTimeAction::_update()
|
||||||
void e2d::FiniteTimeAction::_resetTime()
|
void e2d::FiniteTimeAction::_resetTime()
|
||||||
{
|
{
|
||||||
Action::_resetTime();
|
Action::_resetTime();
|
||||||
_last = Time::getTotalTime() - _delta * _duration;
|
_last = Game::getInstance()->getTotalTime() - _delta * _duration;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,10 @@ e2d::GC::GC()
|
||||||
|
|
||||||
e2d::GC::~GC()
|
e2d::GC::~GC()
|
||||||
{
|
{
|
||||||
|
// 删除所有对象
|
||||||
|
GC::clear();
|
||||||
|
// 清除图片缓存
|
||||||
|
Image::clearCache();
|
||||||
// 删除所有单例
|
// 删除所有单例
|
||||||
Game::destroyInstance();
|
Game::destroyInstance();
|
||||||
Renderer::destroyInstance();
|
Renderer::destroyInstance();
|
||||||
|
|
@ -92,6 +96,11 @@ void e2d::GC::flush()
|
||||||
void e2d::GC::clear()
|
void e2d::GC::clear()
|
||||||
{
|
{
|
||||||
_instance._cleanup = true;
|
_instance._cleanup = true;
|
||||||
|
|
||||||
|
SceneManager::getInstance()->clear();
|
||||||
|
Timer::getInstance()->clearAllTasks();
|
||||||
|
ActionManager::getInstance()->clearAll();
|
||||||
|
|
||||||
for (auto pair : _instance._pool)
|
for (auto pair : _instance._pool)
|
||||||
{
|
{
|
||||||
if (pair.second)
|
if (pair.second)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
#include "..\e2dbase.h"
|
#include "..\e2dbase.h"
|
||||||
#include "..\e2dmanager.h"
|
#include "..\e2dmanager.h"
|
||||||
#include "..\e2dtool.h"
|
#include "..\e2dtool.h"
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
using namespace std::chrono;
|
||||||
|
|
||||||
|
|
||||||
e2d::Game * e2d::Game::_instance = nullptr;
|
e2d::Game * e2d::Game::_instance = nullptr;
|
||||||
|
|
@ -11,6 +14,8 @@ e2d::Game::Game()
|
||||||
, _config(nullptr)
|
, _config(nullptr)
|
||||||
{
|
{
|
||||||
CoInitialize(nullptr);
|
CoInitialize(nullptr);
|
||||||
|
|
||||||
|
_start = _last = _now = steady_clock::now();
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Game::~Game()
|
e2d::Game::~Game()
|
||||||
|
|
@ -36,7 +41,7 @@ void e2d::Game::destroyInstance()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Game::start(bool cleanup)
|
void e2d::Game::start()
|
||||||
{
|
{
|
||||||
auto input = Input::getInstance();
|
auto input = Input::getInstance();
|
||||||
auto window = Window::getInstance();
|
auto window = Window::getInstance();
|
||||||
|
|
@ -45,51 +50,56 @@ void e2d::Game::start(bool cleanup)
|
||||||
auto sceneManager = SceneManager::getInstance();
|
auto sceneManager = SceneManager::getInstance();
|
||||||
auto actionManager = ActionManager::getInstance();
|
auto actionManager = ActionManager::getInstance();
|
||||||
|
|
||||||
// 显示窗口
|
if (!input || !window || !renderer || !timer || !sceneManager || !actionManager)
|
||||||
::ShowWindow(window->getHWnd(), SW_SHOWNORMAL);
|
{
|
||||||
// 刷新窗口内容
|
throw SystemException(L"初始化失败");
|
||||||
::UpdateWindow(window->getHWnd());
|
}
|
||||||
// 处理窗口消息
|
|
||||||
window->poll();
|
|
||||||
// 初始化计时
|
|
||||||
Time::__init();
|
|
||||||
|
|
||||||
|
HWND hWnd = window->getHWnd();
|
||||||
|
if (hWnd == nullptr)
|
||||||
|
{
|
||||||
|
throw SystemException(L"无法创建窗口");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 显示窗口
|
||||||
|
::ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||||
|
::UpdateWindow(hWnd);
|
||||||
|
window->poll();
|
||||||
|
|
||||||
|
// 开始游戏
|
||||||
|
const milliseconds frameInterval(15LL);
|
||||||
|
milliseconds wait, interval;
|
||||||
|
|
||||||
_ended = false;
|
_ended = false;
|
||||||
|
_last = _now = steady_clock::now();
|
||||||
|
|
||||||
while (!_ended)
|
while (!_ended)
|
||||||
{
|
{
|
||||||
// 处理窗口消息
|
_now = steady_clock::now();
|
||||||
window->poll();
|
interval = duration_cast<milliseconds>(_now - _last);
|
||||||
// 刷新时间
|
|
||||||
Time::__updateNow();
|
|
||||||
|
|
||||||
// 判断是否达到了刷新状态
|
if (frameInterval < interval)
|
||||||
if (Time::__isReady())
|
|
||||||
{
|
{
|
||||||
if (_config->_unconfigured)
|
_last = _now;
|
||||||
{
|
|
||||||
_config->_update();
|
|
||||||
}
|
|
||||||
|
|
||||||
input->update(); // 获取用户输入
|
input->update(); // 获取用户输入
|
||||||
timer->update(); // 更新定时器
|
timer->update(); // 更新定时器
|
||||||
actionManager->update(); // 更新动作管理器
|
actionManager->update(); // 更新动作管理器
|
||||||
sceneManager->update(); // 更新场景内容
|
sceneManager->update(); // 更新场景内容
|
||||||
|
_config->_update(); // 更新游戏配置
|
||||||
renderer->render(); // 渲染游戏画面
|
renderer->render(); // 渲染游戏画面
|
||||||
|
window->poll(); // 处理窗口消息
|
||||||
GC::flush(); // 刷新内存池
|
GC::flush(); // 刷新内存池
|
||||||
|
|
||||||
Time::__updateLast(); // 刷新时间信息
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Time::__sleep(); // 挂起线程
|
wait = frameInterval - interval;
|
||||||
|
if (wait.count() > 1LL)
|
||||||
|
{
|
||||||
|
std::this_thread::sleep_for(wait - milliseconds(1LL));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cleanup)
|
|
||||||
{
|
|
||||||
Game::cleanup();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Game::pause()
|
void e2d::Game::pause()
|
||||||
|
|
@ -101,7 +111,9 @@ void e2d::Game::resume()
|
||||||
{
|
{
|
||||||
if (_paused && !_ended)
|
if (_paused && !_ended)
|
||||||
{
|
{
|
||||||
Time::__reset();
|
_last = _now = steady_clock::now();
|
||||||
|
Timer::getInstance()->updateTime();
|
||||||
|
ActionManager::getInstance()->updateTime();
|
||||||
}
|
}
|
||||||
_paused = false;
|
_paused = false;
|
||||||
}
|
}
|
||||||
|
|
@ -129,6 +141,11 @@ e2d::Config* e2d::Game::getConfig()
|
||||||
return _config;
|
return _config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double e2d::Game::getTotalTime() const
|
||||||
|
{
|
||||||
|
return duration_cast<microseconds>(steady_clock::now() - _start).count() / 1000.0 / 1000.0;
|
||||||
|
}
|
||||||
|
|
||||||
void e2d::Game::quit()
|
void e2d::Game::quit()
|
||||||
{
|
{
|
||||||
_ended = true; // 这个变量将控制游戏是否结束
|
_ended = true; // 这个变量将控制游戏是否结束
|
||||||
|
|
@ -136,16 +153,7 @@ void e2d::Game::quit()
|
||||||
|
|
||||||
void e2d::Game::cleanup()
|
void e2d::Game::cleanup()
|
||||||
{
|
{
|
||||||
// 删除所有场景
|
|
||||||
SceneManager::getInstance()->clear();
|
|
||||||
// 清空定时器
|
|
||||||
Timer::getInstance()->clearAllTasks();
|
|
||||||
// 清除所有动作
|
|
||||||
ActionManager::getInstance()->clearAll();
|
|
||||||
// 清空图片缓存
|
|
||||||
Image::clearCache();
|
|
||||||
// 清空音乐缓存
|
|
||||||
Player::getInstance()->clearCache();
|
|
||||||
// 删除所有对象
|
|
||||||
GC::clear();
|
GC::clear();
|
||||||
|
Image::clearCache();
|
||||||
|
Player::getInstance()->clearCache();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -161,11 +161,11 @@ void e2d::Renderer::_renderFps()
|
||||||
{
|
{
|
||||||
++_renderTimes;
|
++_renderTimes;
|
||||||
|
|
||||||
double fDelay = Time::getTotalTime() - _lastRenderTime;
|
double fDelay = Game::getInstance()->getTotalTime() - _lastRenderTime;
|
||||||
if (fDelay >= 0.1)
|
if (fDelay >= 0.1)
|
||||||
{
|
{
|
||||||
_fpsText = String::format(L"FPS: %.1lf", (1 / fDelay) * _renderTimes);
|
_fpsText = String::format(L"FPS: %.1lf", (1 / fDelay) * _renderTimes);
|
||||||
_lastRenderTime = Time::getTotalTime();
|
_lastRenderTime = Game::getInstance()->getTotalTime();
|
||||||
_renderTimes = 0;
|
_renderTimes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,73 +0,0 @@
|
||||||
#include "..\e2dbase.h"
|
|
||||||
#include "..\e2dtool.h"
|
|
||||||
#include "..\e2dmanager.h"
|
|
||||||
#include <thread>
|
|
||||||
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
|
|
||||||
// 游戏开始时间
|
|
||||||
steady_clock::time_point e2d::Time::_start;
|
|
||||||
// 当前时间
|
|
||||||
steady_clock::time_point e2d::Time::_now;
|
|
||||||
// 上一帧刷新时间
|
|
||||||
steady_clock::time_point e2d::Time::_last;
|
|
||||||
// 固定的刷新时间
|
|
||||||
steady_clock::time_point e2d::Time::_fixedLast;
|
|
||||||
// 每一帧间隔
|
|
||||||
milliseconds e2d::Time::_interval;
|
|
||||||
|
|
||||||
|
|
||||||
double e2d::Time::getTotalTime()
|
|
||||||
{
|
|
||||||
return duration_cast<microseconds>(_now - _start).count() / 1000.0 / 1000.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
double e2d::Time::getDeltaTime()
|
|
||||||
{
|
|
||||||
return duration_cast<microseconds>(_now - _last).count() / 1000.0 / 1000.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool e2d::Time::__init()
|
|
||||||
{
|
|
||||||
_start = _fixedLast = _last = _now = steady_clock::now();
|
|
||||||
_interval = milliseconds(15);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool e2d::Time::__isReady()
|
|
||||||
{
|
|
||||||
return _interval < duration_cast<milliseconds>(_now - _fixedLast);
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::Time::__updateNow()
|
|
||||||
{
|
|
||||||
_now = steady_clock::now();
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::Time::__updateLast()
|
|
||||||
{
|
|
||||||
_fixedLast += _interval;
|
|
||||||
|
|
||||||
_last = _now;
|
|
||||||
_now = steady_clock::now();
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::Time::__reset()
|
|
||||||
{
|
|
||||||
_last = _fixedLast = _now = steady_clock::now();
|
|
||||||
Timer::getInstance()->updateTime();
|
|
||||||
ActionManager::getInstance()->updateTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
void e2d::Time::__sleep()
|
|
||||||
{
|
|
||||||
// 计算挂起时长
|
|
||||||
int nWaitMS = 16 - static_cast<int>(duration_cast<milliseconds>(_now - _fixedLast).count());
|
|
||||||
|
|
||||||
if (nWaitMS > 1)
|
|
||||||
{
|
|
||||||
// 挂起线程,释放 CPU 占用
|
|
||||||
std::this_thread::sleep_for(milliseconds(nWaitMS));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -107,6 +107,9 @@ bool e2d::Config::isColliderVisible() const
|
||||||
|
|
||||||
void e2d::Config::_update()
|
void e2d::Config::_update()
|
||||||
{
|
{
|
||||||
|
if (!_unconfigured)
|
||||||
|
return;
|
||||||
|
|
||||||
_unconfigured = false;
|
_unconfigured = false;
|
||||||
|
|
||||||
if (_soundEnabled)
|
if (_soundEnabled)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
#include "..\e2dcommon.h"
|
||||||
|
|
||||||
|
using namespace std::chrono;
|
||||||
|
|
||||||
|
e2d::Duration::Duration()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Duration e2d::Duration::operator+(Duration const & size) const
|
||||||
|
{
|
||||||
|
return Duration();
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Duration e2d::Duration::operator-(Duration const & size) const
|
||||||
|
{
|
||||||
|
return Duration();
|
||||||
|
}
|
||||||
|
|
@ -296,9 +296,12 @@ bool e2d::Image::preload(const Resource& res)
|
||||||
|
|
||||||
void e2d::Image::clearCache()
|
void e2d::Image::clearCache()
|
||||||
{
|
{
|
||||||
|
if (_bitmapCache.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
for (auto bitmap : _bitmapCache)
|
for (auto bitmap : _bitmapCache)
|
||||||
{
|
{
|
||||||
SafeRelease(bitmap.second);
|
bitmap.second->Release();
|
||||||
}
|
}
|
||||||
_bitmapCache.clear();
|
_bitmapCache.clear();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#include "..\e2dcommon.h"
|
||||||
|
|
||||||
|
using namespace std::chrono;
|
||||||
|
|
||||||
|
|
||||||
|
e2d::Time::Time()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Time e2d::Time::operator+(Duration const & size) const
|
||||||
|
{
|
||||||
|
return Time();
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Duration e2d::Time::operator-(Time const & size) const
|
||||||
|
{
|
||||||
|
return Duration();
|
||||||
|
}
|
||||||
|
|
@ -213,12 +213,16 @@ void e2d::ActionManager::clearAllBindedWith(Node * target)
|
||||||
|
|
||||||
void e2d::ActionManager::clearAll()
|
void e2d::ActionManager::clearAll()
|
||||||
{
|
{
|
||||||
for (auto action : _runningActions)
|
if (!_runningActions.empty())
|
||||||
{
|
{
|
||||||
GC::release(action);
|
for (auto action : _runningActions)
|
||||||
|
{
|
||||||
|
GC::release(action);
|
||||||
|
}
|
||||||
|
_runningActions.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
_actions.clear();
|
_actions.clear();
|
||||||
_runningActions.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<e2d::Action*> e2d::ActionManager::get(const String& name)
|
std::vector<e2d::Action*> e2d::ActionManager::get(const String& name)
|
||||||
|
|
|
||||||
|
|
@ -85,20 +85,19 @@ void e2d::SceneManager::pop(Transition * transition /* = nullptr */)
|
||||||
// 设置切换场景动作
|
// 设置切换场景动作
|
||||||
if (transition)
|
if (transition)
|
||||||
{
|
{
|
||||||
_transition = transition;
|
|
||||||
GC::retain(transition);
|
GC::retain(transition);
|
||||||
transition->_init(_currScene, _nextScene);
|
transition->_init(_currScene, _nextScene);
|
||||||
transition->_update();
|
transition->_update();
|
||||||
|
_transition = transition;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::SceneManager::clear()
|
void e2d::SceneManager::clear()
|
||||||
{
|
{
|
||||||
// 清空场景栈
|
// 清空场景栈
|
||||||
while (_scenes.size())
|
while (!_scenes.empty())
|
||||||
{
|
{
|
||||||
auto temp = _scenes.top();
|
_scenes.top()->release();
|
||||||
GC::safeRelease(temp);
|
|
||||||
_scenes.pop();
|
_scenes.pop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,9 +13,13 @@ e2d::Player::Player()
|
||||||
|
|
||||||
e2d::Player::~Player()
|
e2d::Player::~Player()
|
||||||
{
|
{
|
||||||
for (auto pair : _musicList)
|
if (!_musicList.empty())
|
||||||
GC::release(pair.second);
|
{
|
||||||
_musicList.clear();
|
for (auto pair : _musicList)
|
||||||
|
{
|
||||||
|
delete pair.second;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_masteringVoice)
|
if (_masteringVoice)
|
||||||
_masteringVoice->DestroyVoice();
|
_masteringVoice->DestroyVoice();
|
||||||
|
|
@ -31,9 +35,8 @@ e2d::Player * e2d::Player::getInstance()
|
||||||
{
|
{
|
||||||
_instance = new (std::nothrow) Player;
|
_instance = new (std::nothrow) Player;
|
||||||
|
|
||||||
HRESULT hr;
|
if (FAILED(XAudio2Create(&_instance->_xAudio2, 0)) ||
|
||||||
if (FAILED(hr = XAudio2Create(&_instance->_xAudio2, 0)) ||
|
FAILED(_instance->_xAudio2->CreateMasteringVoice(&_instance->_masteringVoice)))
|
||||||
FAILED(hr = _instance->_xAudio2->CreateMasteringVoice(&_instance->_masteringVoice)))
|
|
||||||
{
|
{
|
||||||
throw SystemException(L"³õʼ»¯ XAudio2 ×é¼þʧ°Ü");
|
throw SystemException(L"³õʼ»¯ XAudio2 ×é¼þʧ°Ü");
|
||||||
}
|
}
|
||||||
|
|
@ -68,11 +71,10 @@ bool e2d::Player::preload(const Resource& res)
|
||||||
if (_musicList.end() != _musicList.find(res))
|
if (_musicList.end() != _musicList.find(res))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
Music * music = new (e2d::autorelease) Music();
|
Music * music = new Music();
|
||||||
|
|
||||||
if (music->open(res))
|
if (music->open(res))
|
||||||
{
|
{
|
||||||
GC::retain(music);
|
|
||||||
music->setVolume(_volume);
|
music->setVolume(_volume);
|
||||||
_musicList.insert(std::make_pair(res, music));
|
_musicList.insert(std::make_pair(res, music));
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -139,10 +141,6 @@ void e2d::Player::stop(const String& filePath)
|
||||||
|
|
||||||
void e2d::Player::stop(const Resource& res)
|
void e2d::Player::stop(const Resource& res)
|
||||||
{
|
{
|
||||||
if (res.isResource())
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
if (_musicList.end() != _musicList.find(res))
|
if (_musicList.end() != _musicList.find(res))
|
||||||
_musicList[res]->stop();
|
_musicList[res]->stop();
|
||||||
}
|
}
|
||||||
|
|
@ -204,7 +202,7 @@ void e2d::Player::clearCache()
|
||||||
{
|
{
|
||||||
for (auto pair : _musicList)
|
for (auto pair : _musicList)
|
||||||
{
|
{
|
||||||
GC::release(pair.second);
|
delete pair.second;
|
||||||
}
|
}
|
||||||
_musicList.clear();
|
_musicList.clear();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ bool e2d::Task::isReady() const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if ((Time::getTotalTime() - _lastTime) >= _delay)
|
if ((Game::getInstance()->getTotalTime() - _lastTime) >= _delay)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -80,5 +80,5 @@ e2d::String e2d::Task::getName() const
|
||||||
|
|
||||||
void e2d::Task::updateTime()
|
void e2d::Task::updateTime()
|
||||||
{
|
{
|
||||||
_lastTime = Time::getTotalTime();
|
_lastTime = Game::getInstance()->getTotalTime();
|
||||||
}
|
}
|
||||||
|
|
@ -100,6 +100,9 @@ void e2d::Timer::removeAllTasks()
|
||||||
|
|
||||||
void e2d::Timer::clearAllTasks()
|
void e2d::Timer::clearAllTasks()
|
||||||
{
|
{
|
||||||
|
if (_tasks.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
for (auto task : _tasks)
|
for (auto task : _tasks)
|
||||||
{
|
{
|
||||||
GC::release(task);
|
GC::release(task);
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ void e2d::Transition::_init(Scene * prev, Scene * next)
|
||||||
throw SystemException(L"场景过渡动画图层创建失败");
|
throw SystemException(L"场景过渡动画图层创建失败");
|
||||||
}
|
}
|
||||||
|
|
||||||
_last = Time::getTotalTime();
|
_last = Game::getInstance()->getTotalTime();
|
||||||
_outScene = prev;
|
_outScene = prev;
|
||||||
_inScene = next;
|
_inScene = next;
|
||||||
GC::retain(_outScene);
|
GC::retain(_outScene);
|
||||||
|
|
@ -64,7 +64,7 @@ void e2d::Transition::_update()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_delta = std::min((Time::getTotalTime() - _last) / _duration, 1.0);
|
_delta = std::min((Game::getInstance()->getTotalTime() - _last) / _duration, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
this->_updateCustom();
|
this->_updateCustom();
|
||||||
|
|
|
||||||
|
|
@ -21,9 +21,7 @@ public:
|
||||||
static void destroyInstance();
|
static void destroyInstance();
|
||||||
|
|
||||||
// 启动游戏
|
// 启动游戏
|
||||||
void start(
|
void start();
|
||||||
bool cleanup = true /* 自动清理资源 */
|
|
||||||
);
|
|
||||||
|
|
||||||
// 暂停游戏
|
// 暂停游戏
|
||||||
void pause();
|
void pause();
|
||||||
|
|
@ -48,6 +46,8 @@ public:
|
||||||
// 获取游戏配置
|
// 获取游戏配置
|
||||||
Config* getConfig();
|
Config* getConfig();
|
||||||
|
|
||||||
|
double getTotalTime() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Game();
|
Game();
|
||||||
|
|
||||||
|
|
@ -59,6 +59,9 @@ private:
|
||||||
bool _ended;
|
bool _ended;
|
||||||
bool _paused;
|
bool _paused;
|
||||||
Config* _config;
|
Config* _config;
|
||||||
|
std::chrono::steady_clock::time_point _start;
|
||||||
|
std::chrono::steady_clock::time_point _now;
|
||||||
|
std::chrono::steady_clock::time_point _last;
|
||||||
|
|
||||||
static Game * _instance;
|
static Game * _instance;
|
||||||
};
|
};
|
||||||
|
|
@ -185,46 +188,6 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 时间控制
|
|
||||||
class Time
|
|
||||||
{
|
|
||||||
friend class Game;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// 获取上一帧的时间间隔(秒)
|
|
||||||
static double getDeltaTime();
|
|
||||||
|
|
||||||
// 获取游戏总时长(秒)
|
|
||||||
static double getTotalTime();
|
|
||||||
|
|
||||||
private:
|
|
||||||
// 初始化计时操作
|
|
||||||
static bool __init();
|
|
||||||
|
|
||||||
// 是否达到更新时间
|
|
||||||
static bool __isReady();
|
|
||||||
|
|
||||||
// 更新当前时间
|
|
||||||
static void __updateNow();
|
|
||||||
|
|
||||||
// 更新时间信息
|
|
||||||
static void __updateLast();
|
|
||||||
|
|
||||||
// 重置时间信息
|
|
||||||
static void __reset();
|
|
||||||
|
|
||||||
// 挂起线程
|
|
||||||
static void __sleep();
|
|
||||||
|
|
||||||
private:
|
|
||||||
static std::chrono::steady_clock::time_point _start;
|
|
||||||
static std::chrono::steady_clock::time_point _now;
|
|
||||||
static std::chrono::steady_clock::time_point _last;
|
|
||||||
static std::chrono::steady_clock::time_point _fixedLast;
|
|
||||||
static std::chrono::milliseconds _interval;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// 输入设备
|
// 输入设备
|
||||||
class Input
|
class Input
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -404,6 +404,34 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 时间段
|
||||||
|
class Duration
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Duration();
|
||||||
|
|
||||||
|
Duration operator + (Duration const & size) const;
|
||||||
|
Duration operator - (Duration const & size) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::chrono::milliseconds _duration;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 时间点
|
||||||
|
class Time
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Time();
|
||||||
|
|
||||||
|
Time operator + (Duration const & size) const;
|
||||||
|
Duration operator - (Time const & size) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::chrono::steady_clock::time_point _time;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// ×ÖÌå
|
// ×ÖÌå
|
||||||
class Font
|
class Font
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -55,11 +55,11 @@
|
||||||
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
|
||||||
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Collider.cpp" />
|
<ClCompile Include="..\..\core\Common\Collider.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Color.cpp" />
|
<ClCompile Include="..\..\core\Common\Color.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Config.cpp" />
|
<ClCompile Include="..\..\core\Common\Config.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Common\Duration.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Function.cpp" />
|
<ClCompile Include="..\..\core\Common\Function.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
||||||
|
|
@ -70,6 +70,7 @@
|
||||||
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Size.cpp" />
|
<ClCompile Include="..\..\core\Common\Size.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\String.cpp" />
|
<ClCompile Include="..\..\core\Common\String.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Common\Time.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\Exception.cpp" />
|
<ClCompile Include="..\..\core\Custom\Exception.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\SystemException.cpp" />
|
<ClCompile Include="..\..\core\Custom\SystemException.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\TextRenderer.cpp" />
|
<ClCompile Include="..\..\core\Custom\TextRenderer.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -115,9 +115,6 @@
|
||||||
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
||||||
<Filter>Base</Filter>
|
<Filter>Base</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\Base\Time.cpp">
|
|
||||||
<Filter>Base</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\Base\Window.cpp">
|
<ClCompile Include="..\..\core\Base\Window.cpp">
|
||||||
<Filter>Base</Filter>
|
<Filter>Base</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
||||||
|
|
@ -199,11 +199,11 @@
|
||||||
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
|
||||||
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Collider.cpp" />
|
<ClCompile Include="..\..\core\Common\Collider.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Color.cpp" />
|
<ClCompile Include="..\..\core\Common\Color.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Config.cpp" />
|
<ClCompile Include="..\..\core\Common\Config.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Common\Duration.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Function.cpp" />
|
<ClCompile Include="..\..\core\Common\Function.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
||||||
|
|
@ -214,6 +214,7 @@
|
||||||
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
<ClCompile Include="..\..\core\Common\Scene.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Size.cpp" />
|
<ClCompile Include="..\..\core\Common\Size.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\String.cpp" />
|
<ClCompile Include="..\..\core\Common\String.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Common\Time.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\Exception.cpp" />
|
<ClCompile Include="..\..\core\Custom\Exception.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\SystemException.cpp" />
|
<ClCompile Include="..\..\core\Custom\SystemException.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\TextRenderer.cpp" />
|
<ClCompile Include="..\..\core\Custom\TextRenderer.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -115,9 +115,6 @@
|
||||||
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
||||||
<Filter>Base</Filter>
|
<Filter>Base</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\Base\Time.cpp">
|
|
||||||
<Filter>Base</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\Base\Window.cpp">
|
<ClCompile Include="..\..\core\Base\Window.cpp">
|
||||||
<Filter>Base</Filter>
|
<Filter>Base</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
||||||
|
|
@ -219,11 +219,11 @@
|
||||||
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
<ClCompile Include="..\..\core\Base\GC.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
<ClCompile Include="..\..\core\Base\Input.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
<ClCompile Include="..\..\core\Base\Renderer.cpp" />
|
||||||
<ClCompile Include="..\..\core\Base\Time.cpp" />
|
|
||||||
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
<ClCompile Include="..\..\core\Base\Window.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Collider.cpp" />
|
<ClCompile Include="..\..\core\Common\Collider.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Color.cpp" />
|
<ClCompile Include="..\..\core\Common\Color.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Config.cpp" />
|
<ClCompile Include="..\..\core\Common\Config.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Common\Duration.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
<ClCompile Include="..\..\core\Common\Font.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Function.cpp" />
|
<ClCompile Include="..\..\core\Common\Function.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Point.cpp" />
|
<ClCompile Include="..\..\core\Common\Point.cpp" />
|
||||||
|
|
@ -234,6 +234,7 @@
|
||||||
<ClCompile Include="..\..\core\Common\Size.cpp" />
|
<ClCompile Include="..\..\core\Common\Size.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\String.cpp" />
|
<ClCompile Include="..\..\core\Common\String.cpp" />
|
||||||
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
<ClCompile Include="..\..\core\Common\Image.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\Common\Time.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\Exception.cpp" />
|
<ClCompile Include="..\..\core\Custom\Exception.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\SystemException.cpp" />
|
<ClCompile Include="..\..\core\Custom\SystemException.cpp" />
|
||||||
<ClCompile Include="..\..\core\Custom\TextRenderer.cpp" />
|
<ClCompile Include="..\..\core\Custom\TextRenderer.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -78,9 +78,6 @@
|
||||||
<ClCompile Include="..\..\core\Manager\SceneManager.cpp">
|
<ClCompile Include="..\..\core\Manager\SceneManager.cpp">
|
||||||
<Filter>Manager</Filter>
|
<Filter>Manager</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\Base\Time.cpp">
|
|
||||||
<Filter>Base</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
<ClCompile Include="..\..\core\Base\Renderer.cpp">
|
||||||
<Filter>Base</Filter>
|
<Filter>Base</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
@ -249,6 +246,12 @@
|
||||||
<ClCompile Include="..\..\core\Event\Collision.cpp">
|
<ClCompile Include="..\..\core\Event\Collision.cpp">
|
||||||
<Filter>Event</Filter>
|
<Filter>Event</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Common\Time.cpp">
|
||||||
|
<Filter>Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\Common\Duration.cpp">
|
||||||
|
<Filter>Common</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\core\easy2d.h" />
|
<ClInclude Include="..\..\core\easy2d.h" />
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue