修复计时更新不准确导致画面渲染卡帧的BUG
This commit is contained in:
parent
7a28ddace2
commit
2def0e2794
|
|
@ -159,21 +159,19 @@ void e2d::Game::start(bool autoRelease/* true */)
|
|||
|
||||
// 判断是否达到了刷新状态
|
||||
if (Time::__isReady())
|
||||
{
|
||||
Timer::__update(); // 定时器管理器执行程序
|
||||
ActionManager::__update(); // 动作管理器执行程序
|
||||
while (Time::__isReady())
|
||||
{
|
||||
Input::__update(); // 获取用户输入
|
||||
Timer::__update(); // 更新定时器
|
||||
ActionManager::__update(); // 更新动作管理器
|
||||
SceneManager::__update(); // 更新场景内容
|
||||
Time::__updateLast(); // 刷新时间信息
|
||||
}
|
||||
Renderer::__render(); // 渲染游戏画面
|
||||
GC::__update(); // 刷新内存池
|
||||
|
||||
Time::__updateLast(); // 刷新时间信息
|
||||
}
|
||||
else
|
||||
{
|
||||
Time::__sleep(); // 挂起线程
|
||||
GC::__update(); // 刷新内存池
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,14 +9,10 @@ static steady_clock::time_point s_tStart;
|
|||
// 当前时间
|
||||
static steady_clock::time_point s_tNow;
|
||||
// 上一帧刷新时间
|
||||
static steady_clock::time_point s_tFixedUpdate;
|
||||
// 上一次更新时间
|
||||
static steady_clock::time_point s_tLastUpdate;
|
||||
// 每一帧间隔
|
||||
static milliseconds s_tExceptedInvertal;
|
||||
|
||||
// 上一帧与当前帧的时间间隔
|
||||
static unsigned int s_nInterval = 0;
|
||||
// 游戏开始时长
|
||||
static unsigned int s_nTotalTime = 0;
|
||||
|
||||
|
|
@ -33,24 +29,24 @@ unsigned int e2d::Time::getTotalTimeMilliseconds()
|
|||
|
||||
double e2d::Time::getDeltaTime()
|
||||
{
|
||||
return s_nInterval / 1000.0;
|
||||
return s_tExceptedInvertal.count() / 1000.0;
|
||||
}
|
||||
|
||||
unsigned int e2d::Time::getDeltaTimeMilliseconds()
|
||||
{
|
||||
return s_nInterval;
|
||||
return static_cast<unsigned int>(s_tExceptedInvertal.count());
|
||||
}
|
||||
|
||||
bool e2d::Time::__init()
|
||||
{
|
||||
s_tStart = s_tLastUpdate = s_tFixedUpdate = s_tNow = steady_clock::now();
|
||||
s_tStart = s_tLastUpdate = s_tNow = steady_clock::now();
|
||||
s_tExceptedInvertal = milliseconds(15);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool e2d::Time::__isReady()
|
||||
{
|
||||
return s_tExceptedInvertal < duration_cast<milliseconds>(s_tNow - s_tFixedUpdate);
|
||||
return s_tExceptedInvertal < duration_cast<milliseconds>(s_tNow - s_tLastUpdate);
|
||||
}
|
||||
|
||||
void e2d::Time::__updateNow()
|
||||
|
|
@ -61,25 +57,22 @@ void e2d::Time::__updateNow()
|
|||
|
||||
void e2d::Time::__updateLast()
|
||||
{
|
||||
s_tFixedUpdate += s_tExceptedInvertal;
|
||||
s_tLastUpdate = s_tNow;
|
||||
s_tLastUpdate += s_tExceptedInvertal;
|
||||
|
||||
s_tNow = steady_clock::now();
|
||||
s_nInterval = static_cast<unsigned int>(duration_cast<milliseconds>(s_tNow - s_tLastUpdate).count());
|
||||
s_nTotalTime = static_cast<unsigned int>(duration_cast<milliseconds>(s_tNow - s_tStart).count());
|
||||
}
|
||||
|
||||
void e2d::Time::__reset()
|
||||
{
|
||||
s_tLastUpdate = s_tFixedUpdate = s_tNow = steady_clock::now();
|
||||
s_nInterval = 0;
|
||||
s_tLastUpdate = s_tNow = steady_clock::now();
|
||||
s_nTotalTime = static_cast<unsigned int>(duration_cast<milliseconds>(s_tNow - s_tStart).count());
|
||||
}
|
||||
|
||||
void e2d::Time::__sleep()
|
||||
{
|
||||
// 计算挂起时长
|
||||
int nWaitMS = 16 - static_cast<int>(duration_cast<milliseconds>(s_tNow - s_tFixedUpdate).count());
|
||||
int nWaitMS = 16 - static_cast<int>(duration_cast<milliseconds>(s_tNow - s_tLastUpdate).count());
|
||||
|
||||
if (nWaitMS > 1)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue