|
|
发表于 2007-5-22 22:42:00
|
显示全部楼层
Re: Re:讨论:效率最高的游戏循环,怎么写?
snhun: Re:讨论:效率最高的游戏循环,怎么写?
那么,如下修改,速度是不是更快呢?
while(run)
{
while(有没有系统消息)
{
转换并处理系统消息
}
游戏循环
}
你才要好好学习一下哦!!你写的是两个while,为什么不可能“不管有没有消息都要进入游戏循环”。自己写的都看不懂哈?
不过这样写没错!本来就应该“不管有没有消息都要进入游戏循环”,因为有些逻辑处理并有“系统消息”来就可以不处理的,难道非要等到下一个loop来处理吗?
效率最高是怎么定义?是每个loop跑的时间最短就效率最高吗?错了,效率是指你每个loop中在固定的时间内做尽可能多的事情,固定的时间是为了保证你有一个比较平滑的帧数:
while( true )
{
if( 有系统消息 )
{
处理系统消息
}
if( 离上次“游戏循环”大于0.1秒 )
{
游戏循环
}
else
{
sleep(1); // 你不想一run就把CPU占满的话,就要加这个!!!
}
}
这样就可以了,如果照你之前的设计,当连续有10000个系统消息来,且先不管这些消息的时间间隔,你是不是要一直把这10000个系统消息都处理完才来处理游戏逻辑喃?
如果你真的对你所谓的效率实在是在乎得不得了,请用多线程,另外搭双CPU,或者双核的CPU,然后把处理系统消息与处理游戏循环分开用不同的线程来做。
实在还不行,好好学习一下,用计算机集群吧,不过估计你这个问题也用不上.....
|
|