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