我们玩的游戏,都逃不过这样的一个循环 初始化-> while循环(Update 和 render)-> 游戏
结束,释放空间。大致如下:
void main()
{
void init();
while(true)
{
update();
render();
}
exit();
}
首先是update,在update里面要实现 帧的更新。一般30帧眼睛就看不过来了。首先我们实
现30 frame per second。 如果我们电脑性能比较好,那么执行代码速度快,我们就必须
Sleep下来等待一定的时间,之后在进行下一步代码如下:
class Timer
{
public:
Timer():m_curTime(clock()),m_perTime(m_curTime){}
void GetCurrentTime();
void RefreshTime();
int GetDuringRun();
private:
clock_t m_curTime;
clock_t m_perTime;
};
void Timer::GetCurrentTime()
{
m_curTime=clock();
}
void Timer::RefreshTime()
{
m_perTime=m_curTime;
}
int Timer::GetDuringRun()
{
return m_curTime-m_perTime;
}
#define COSTTIMEPERFRAME 33
class FPSManager
{
public:
static FPSManager* InitFPSManager();
void RefreshFPS();
int SleepTime();
private:
FPSManager():m_updateTime(Timer()),m_count(0){};
void DisplayFPS();
static FPSManager* s_FPSManager;
Timer m_updateTime;
Timer m_displayTime;
unsigned int m_count;
};
void FPSManager::DisplayFPS()
{
cout<<"the FPS is : "<<m_count<<endl;
}
void FPSManager::RefreshFPS()
{
m_count++;
}
FPSManager* FPSManager::s_FPSManager=NULL;
FPSManager* FPSManager::InitFPSManager()
{
if(s_FPSManager==NULL)
{
s_FPSManager=new FPSManager();
}
return s_FPSManager;
}
int FPSManager::SleepTime()
{
m_updateTime.GetCurrentTime();
int time=(m_updateTime.GetDuringRun());
m_updateTime.RefreshTime();
return time;
}
上面是我写的一个FPS类和一个Timer类用 现在写一个main去实现帧的更新:
首先是update,在update里面要实现 帧的更新。一般30帧眼睛就看不过来了。首先我们实现30 frame per second。 如果我们电脑性能比较好,那么执行代码速度快,我们就必须Sleep下来等待一定的时间,之后在进行下一步
代码如下:
{
FPSManager* fps=FPSManager::InitFPSManager();
while(true)
{
fps->RefreshFPS();
//fps->DisplayFPS();
int time=fps->SleepTime();
Sleep(time);
}
system("pause");
}
下次在更新其他的 ,比如按键事件和写一个状态机来实现一个游戏基本元素。并且FPS的更新和游戏没有多大的联系可以放入一个线程让它一直去执行。