应用Time和Duration类
This commit is contained in:
parent
7d17c3b225
commit
c3ebe2545a
|
|
@ -24,7 +24,7 @@ bool e2d::Action::isRunning()
|
|||
void e2d::Action::resume()
|
||||
{
|
||||
_running = true;
|
||||
_last = Game::getInstance()->getTotalTime();
|
||||
_last = Game::getInstance()->getTotalDuration().seconds();
|
||||
}
|
||||
|
||||
void e2d::Action::pause()
|
||||
|
|
@ -56,7 +56,7 @@ void e2d::Action::reset()
|
|||
{
|
||||
_initialized = false;
|
||||
_done = false;
|
||||
_last = Game::getInstance()->getTotalTime();
|
||||
_last = Game::getInstance()->getTotalDuration().seconds();
|
||||
}
|
||||
|
||||
bool e2d::Action::_isDone()
|
||||
|
|
@ -74,7 +74,7 @@ void e2d::Action::_startWithTarget(Node* target)
|
|||
void e2d::Action::_init()
|
||||
{
|
||||
_initialized = true;
|
||||
_last = Game::getInstance()->getTotalTime();
|
||||
_last = Game::getInstance()->getTotalDuration().seconds();
|
||||
}
|
||||
|
||||
void e2d::Action::_update()
|
||||
|
|
|
|||
|
|
@ -56,7 +56,8 @@ void e2d::Animate::_update()
|
|||
return;
|
||||
}
|
||||
|
||||
while ((Game::getInstance()->getTotalTime() - _last) >= _animation->getInterval())
|
||||
auto game = Game::getInstance();
|
||||
while ((game->getTotalDuration().seconds() - _last) >= _animation->getInterval())
|
||||
{
|
||||
auto& frames = _animation->getFrames();
|
||||
auto target = dynamic_cast<Sprite*>(_target);
|
||||
|
|
@ -80,7 +81,7 @@ void e2d::Animate::_update()
|
|||
void e2d::Animate::_resetTime()
|
||||
{
|
||||
Action::_resetTime();
|
||||
_last = Game::getInstance()->getTotalTime();
|
||||
_last = Game::getInstance()->getTotalDuration().seconds();
|
||||
}
|
||||
|
||||
void e2d::Animate::reset()
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ void e2d::Delay::_update()
|
|||
{
|
||||
Action::_update();
|
||||
|
||||
_delta = Game::getInstance()->getTotalTime() - _last;
|
||||
_delta = Game::getInstance()->getTotalDuration().seconds() - _last;
|
||||
|
||||
if (_delta >= _delay)
|
||||
{
|
||||
|
|
@ -42,5 +42,5 @@ void e2d::Delay::_update()
|
|||
void e2d::Delay::_resetTime()
|
||||
{
|
||||
Action::_resetTime();
|
||||
_last = Game::getInstance()->getTotalTime() - _delta;
|
||||
_last = Game::getInstance()->getTotalDuration().seconds() - _delta;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ void e2d::FiniteTimeAction::_update()
|
|||
}
|
||||
else
|
||||
{
|
||||
_delta = std::min((Game::getInstance()->getTotalTime() - _last) / _duration, 1.0);
|
||||
_delta = std::min((Game::getInstance()->getTotalDuration().seconds() - _last) / _duration, 1.0);
|
||||
|
||||
if (_delta >= 1)
|
||||
{
|
||||
|
|
@ -40,5 +40,5 @@ void e2d::FiniteTimeAction::_update()
|
|||
void e2d::FiniteTimeAction::_resetTime()
|
||||
{
|
||||
Action::_resetTime();
|
||||
_last = Game::getInstance()->getTotalTime() - _delta * _duration;
|
||||
_last = Game::getInstance()->getTotalDuration().seconds() - _delta * _duration;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ e2d::Game::Game()
|
|||
{
|
||||
CoInitialize(nullptr);
|
||||
|
||||
_start = _last = _now = steady_clock::now();
|
||||
_start = _last = _now = Time::now();
|
||||
}
|
||||
|
||||
e2d::Game::~Game()
|
||||
|
|
@ -67,16 +67,16 @@ void e2d::Game::start()
|
|||
window->poll();
|
||||
|
||||
// ¿ªÊ¼ÓÎÏ·
|
||||
const milliseconds frameInterval(15LL);
|
||||
milliseconds wait, interval;
|
||||
Duration frameInterval(15), interval;
|
||||
int wait = 0;
|
||||
|
||||
_ended = false;
|
||||
_last = _now = steady_clock::now();
|
||||
_last = _now = Time::now();
|
||||
|
||||
while (!_ended)
|
||||
{
|
||||
_now = steady_clock::now();
|
||||
interval = duration_cast<milliseconds>(_now - _last);
|
||||
_now = Time::now();
|
||||
interval = _now - _last;
|
||||
|
||||
if (frameInterval < interval)
|
||||
{
|
||||
|
|
@ -93,10 +93,10 @@ void e2d::Game::start()
|
|||
}
|
||||
else
|
||||
{
|
||||
wait = frameInterval - interval;
|
||||
if (wait.count() > 1LL)
|
||||
wait = (frameInterval - interval).milliseconds() - 1;
|
||||
if (wait > 1)
|
||||
{
|
||||
std::this_thread::sleep_for(wait - milliseconds(1LL));
|
||||
std::this_thread::sleep_for(milliseconds(wait));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -111,7 +111,7 @@ void e2d::Game::resume()
|
|||
{
|
||||
if (_paused && !_ended)
|
||||
{
|
||||
_last = _now = steady_clock::now();
|
||||
_last = _now = Time::now();
|
||||
Timer::getInstance()->updateTime();
|
||||
ActionManager::getInstance()->updateTime();
|
||||
}
|
||||
|
|
@ -141,9 +141,9 @@ e2d::Config* e2d::Game::getConfig()
|
|||
return _config;
|
||||
}
|
||||
|
||||
double e2d::Game::getTotalTime() const
|
||||
e2d::Duration e2d::Game::getTotalDuration() const
|
||||
{
|
||||
return duration_cast<microseconds>(steady_clock::now() - _start).count() / 1000.0 / 1000.0;
|
||||
return std::move(_now - _start);
|
||||
}
|
||||
|
||||
void e2d::Game::quit()
|
||||
|
|
|
|||
|
|
@ -161,11 +161,12 @@ void e2d::Renderer::_renderFps()
|
|||
{
|
||||
++_renderTimes;
|
||||
|
||||
double fDelay = Game::getInstance()->getTotalTime() - _lastRenderTime;
|
||||
double duration = Game::getInstance()->getTotalDuration().seconds();
|
||||
double fDelay = duration - _lastRenderTime;
|
||||
if (fDelay >= 0.1)
|
||||
{
|
||||
_fpsText = String::format(L"FPS: %.1lf", (1 / fDelay) * _renderTimes);
|
||||
_lastRenderTime = Game::getInstance()->getTotalTime();
|
||||
_lastRenderTime = duration;
|
||||
_renderTimes = 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,15 +3,70 @@
|
|||
using namespace std::chrono;
|
||||
|
||||
e2d::Duration::Duration()
|
||||
: ms()
|
||||
{
|
||||
}
|
||||
|
||||
e2d::Duration e2d::Duration::operator+(Duration const & size) const
|
||||
e2d::Duration::Duration(int ms)
|
||||
: ms(ms)
|
||||
{
|
||||
return Duration();
|
||||
}
|
||||
|
||||
e2d::Duration e2d::Duration::operator-(Duration const & size) const
|
||||
int e2d::Duration::milliseconds() const
|
||||
{
|
||||
return Duration();
|
||||
return static_cast<int>(ms.count());
|
||||
}
|
||||
|
||||
double e2d::Duration::seconds() const
|
||||
{
|
||||
return ms.count() / 1000.0;
|
||||
}
|
||||
|
||||
double e2d::Duration::minutes() const
|
||||
{
|
||||
return ms.count() / 1000.0 / 60.0;
|
||||
}
|
||||
|
||||
bool e2d::Duration::operator==(const Duration & other) const
|
||||
{
|
||||
return ms == other.ms;
|
||||
}
|
||||
|
||||
bool e2d::Duration::operator!=(const Duration & other) const
|
||||
{
|
||||
return ms != other.ms;
|
||||
}
|
||||
|
||||
bool e2d::Duration::operator>(const Duration & other) const
|
||||
{
|
||||
return ms > other.ms;
|
||||
}
|
||||
|
||||
bool e2d::Duration::operator>=(const Duration & other) const
|
||||
{
|
||||
return ms >= other.ms;
|
||||
}
|
||||
|
||||
bool e2d::Duration::operator<(const Duration & other) const
|
||||
{
|
||||
return ms < other.ms;
|
||||
}
|
||||
|
||||
bool e2d::Duration::operator<=(const Duration & other) const
|
||||
{
|
||||
return ms <= other.ms;
|
||||
}
|
||||
|
||||
e2d::Duration e2d::Duration::operator+(Duration const & other) const
|
||||
{
|
||||
Duration result;
|
||||
result.ms = ms + other.ms;
|
||||
return std::move(result);
|
||||
}
|
||||
|
||||
e2d::Duration e2d::Duration::operator-(Duration const & other) const
|
||||
{
|
||||
Duration result;
|
||||
result.ms = ms - other.ms;
|
||||
return std::move(result);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,12 +7,28 @@ e2d::Time::Time()
|
|||
{
|
||||
}
|
||||
|
||||
e2d::Time e2d::Time::operator+(Duration const & size) const
|
||||
time_t e2d::Time::getTimeStamp() const
|
||||
{
|
||||
return Time();
|
||||
auto now = time_point_cast<milliseconds>(time).time_since_epoch();
|
||||
return static_cast<time_t>(now.count());
|
||||
}
|
||||
|
||||
e2d::Duration e2d::Time::operator-(Time const & size) const
|
||||
e2d::Time e2d::Time::operator+(Duration const & other) const
|
||||
{
|
||||
return Duration();
|
||||
Time result;
|
||||
result.time = time - other.ms;
|
||||
return std::move(result);
|
||||
}
|
||||
|
||||
e2d::Duration e2d::Time::operator-(Time const & other) const
|
||||
{
|
||||
int ms = static_cast<int>(duration_cast<milliseconds>(time - other.time).count());
|
||||
return std::move(Duration(ms));
|
||||
}
|
||||
|
||||
e2d::Time e2d::Time::now()
|
||||
{
|
||||
Time now;
|
||||
now.time = steady_clock::now();
|
||||
return std::move(now);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ bool e2d::Task::isReady() const
|
|||
{
|
||||
return true;
|
||||
}
|
||||
if ((Game::getInstance()->getTotalTime() - _lastTime) >= _delay)
|
||||
if ((Game::getInstance()->getTotalDuration().seconds() - _lastTime) >= _delay)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
@ -80,5 +80,5 @@ e2d::String e2d::Task::getName() const
|
|||
|
||||
void e2d::Task::updateTime()
|
||||
{
|
||||
_lastTime = Game::getInstance()->getTotalTime();
|
||||
_lastTime = Game::getInstance()->getTotalDuration().seconds();
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
e2d::Transition::Transition(double duration)
|
||||
: _end(false)
|
||||
, _last(0)
|
||||
, _last()
|
||||
, _delta(0)
|
||||
, _outScene(nullptr)
|
||||
, _inScene(nullptr)
|
||||
|
|
@ -45,7 +45,7 @@ void e2d::Transition::_init(Scene * prev, Scene * next)
|
|||
throw SystemException(L"场景过渡动画图层创建失败");
|
||||
}
|
||||
|
||||
_last = Game::getInstance()->getTotalTime();
|
||||
_last = Game::getInstance()->getTotalDuration();
|
||||
_outScene = prev;
|
||||
_inScene = next;
|
||||
GC::retain(_outScene);
|
||||
|
|
@ -64,7 +64,8 @@ void e2d::Transition::_update()
|
|||
}
|
||||
else
|
||||
{
|
||||
_delta = std::min((Game::getInstance()->getTotalTime() - _last) / _duration, 1.0);
|
||||
_delta = (Game::getInstance()->getTotalDuration() - _last).seconds() / _duration;
|
||||
_delta = std::min(_delta, 1.0);
|
||||
}
|
||||
|
||||
this->_updateCustom();
|
||||
|
|
|
|||
|
|
@ -46,7 +46,8 @@ public:
|
|||
// »ñÈ¡ÓÎÏ·ÅäÖÃ
|
||||
Config* getConfig();
|
||||
|
||||
double getTotalTime() const;
|
||||
// 获取游戏总时长
|
||||
Duration getTotalDuration() const;
|
||||
|
||||
private:
|
||||
Game();
|
||||
|
|
@ -56,12 +57,12 @@ private:
|
|||
E2D_DISABLE_COPY(Game);
|
||||
|
||||
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;
|
||||
bool _ended;
|
||||
bool _paused;
|
||||
Config* _config;
|
||||
Time _start;
|
||||
Time _now;
|
||||
Time _last;
|
||||
|
||||
static Game * _instance;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -410,11 +410,31 @@ class Duration
|
|||
public:
|
||||
Duration();
|
||||
|
||||
Duration operator + (Duration const & size) const;
|
||||
Duration operator - (Duration const & size) const;
|
||||
explicit Duration(
|
||||
int ms
|
||||
);
|
||||
|
||||
protected:
|
||||
std::chrono::milliseconds _duration;
|
||||
// 获取毫秒数
|
||||
int milliseconds() const;
|
||||
|
||||
// 获取秒数
|
||||
double seconds() const;
|
||||
|
||||
// 获取分钟数
|
||||
double minutes() const;
|
||||
|
||||
bool operator== (const Duration &) const;
|
||||
bool operator!= (const Duration &) const;
|
||||
bool operator> (const Duration &) const;
|
||||
bool operator>= (const Duration &) const;
|
||||
bool operator< (const Duration &) const;
|
||||
bool operator<= (const Duration &) const;
|
||||
|
||||
Duration operator + (Duration const & other) const;
|
||||
Duration operator - (Duration const & other) const;
|
||||
|
||||
public:
|
||||
std::chrono::milliseconds ms;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -424,11 +444,19 @@ class Time
|
|||
public:
|
||||
Time();
|
||||
|
||||
Time operator + (Duration const & size) const;
|
||||
Duration operator - (Time const & size) const;
|
||||
// 获取时间戳
|
||||
time_t getTimeStamp() const;
|
||||
|
||||
protected:
|
||||
std::chrono::steady_clock::time_point _time;
|
||||
// 计算时间间隔后的时间点
|
||||
Time operator + (Duration const & other) const;
|
||||
// 计算两时间点的时间间隔
|
||||
Duration operator - (Time const & other) const;
|
||||
|
||||
// 获取当前时间
|
||||
static Time now();
|
||||
|
||||
public:
|
||||
std::chrono::steady_clock::time_point time;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -46,9 +46,9 @@ protected:
|
|||
|
||||
protected:
|
||||
bool _end;
|
||||
double _last;
|
||||
double _duration;
|
||||
double _delta;
|
||||
Duration _last;
|
||||
Size _windowSize;
|
||||
Scene * _outScene;
|
||||
Scene * _inScene;
|
||||
|
|
|
|||
Loading…
Reference in New Issue