社区
游戏开发
帖子详情
关于游戏主循环的写法
kofightas
2004-05-08 12:34:00
我现在知道几种写法,但是如果限制游戏帧数,cpu占用率就达到100%。
不限制的话反倒能有较低的占用率。
请给出一种两全的主循环写法,谢谢
...全文
670
24
打赏
收藏
关于游戏主循环的写法
我现在知道几种写法,但是如果限制游戏帧数,cpu占用率就达到100%。 不限制的话反倒能有较低的占用率。 请给出一种两全的主循环写法,谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kofightas
2004-06-23
打赏
举报
回复
这个帖子其实以前结过贴了,后来那次服务器坏掉结贴失效...
这个问题我现在基本明朗了,最后跟关注这个帖子的人交待一下。
sleep肯定是不用的,帧数差是一方面,另外在不同机器上速度差距过大
游戏里面限制帧数最常用方法还是用peekmassage加上每次主循环取系统运行时间,未到约定时间间隔则等待。
当然如楼上说的,3d游戏里一般并不限制帧数,而一般限制世界的更新次数。而在等待时间里绘制游戏画面。这样做的原因是3D游戏中绘制画面的复杂度差距很大,在更新游戏世界的剩余时间绘制能保证游戏不出现时快时慢的情况。而在配置低的机器上,游戏丢帧但不影响进行速度.
用peekmessage并不会使cpu使用率到100%,但限制帧数或游戏世界更新次数就必然令cpu达到100%.
cpu 100%会影响子线程或子进程的执行效率的想法不完全正确,除非把绘图之类的巨大工作放到子进程中,否则影响微乎其微。游戏中子进程的工作一般是ai或网络数据传输。
这帖子就此结贴,如果大家对我现在总结的事有什么不同意见,欢迎开新贴讨论。
davidlxm
2004-06-16
打赏
举报
回复
Sleep函数任何时候都不要用(不包括SleepEx),还不如带TimeOut的WaitEvent更实用一些。
Sleep的坏处主要在于阻塞了系统消息。影响了程序该有的响应时间。
主循环主要看你程序如何控制时钟。游戏一般采用动态FPS的技术,现代3D游戏的FPS越高越好。游戏计算本身运算需要相当多的CPU,主循环这几行test,jmp指令浪费的时间几乎为0。使用了PeekMessage(&msg,NULL,0,0,PM_REMOVE),系统会为你管理闲置的CPU使用。不想使用CPU,别去做复杂的计算就行了。如果想限制FPS来节约CPU,就做个Timer。
mme
2004-06-15
打赏
举报
回复
老实说100%不是坏事,因为消息还是能够得到处理的,而且用于游戏的cpu时间更多,这样是合理的。因为游戏的计算,渲染需要大量的cpu时间,如果你使用sleep等延时,那么,cpu的时间就被浪费掉了。
bopengbopeng
2004-06-11
打赏
举报
回复
100%就100%吧。。。
stephen85
2004-06-10
打赏
举报
回复
up
snwcwt
2004-06-10
打赏
举报
回复
Sleep可以保证在一秒钟之内FPS的值差一般不会超过2个FPS
无论机器快还是慢
(机器太慢,以至于不SLEEP都在一秒钟达不到那个FPS值除外)
huwei001982
2004-06-09
打赏
举报
回复
Sleep少用, 应该自已写个
allsword
2004-06-09
打赏
举报
回复
RE sleep,帧数差那么一点点又何防呢?
sleep俺发誓在游戏中尽量少用,
由于各人机器速度相差很大,会出现很大的差别的,
顺便问一下兄弟们各损失多少分:<
snwcwt
2004-06-07
打赏
举报
回复
sleep,帧数差那么一点点又何防呢?
林仪明
2004-06-06
打赏
举报
回复
嗯嗯,估计都是peekmessage的
huwei001982
2004-05-13
打赏
举报
回复
好像绝大部分游戏的占用率都是100%
传奇, CS,..等等
EnigmaXJ
2004-05-12
打赏
举报
回复
while(!done)
{
start_time=GetTickCount();
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (msg.message==WM_QUIT)
{
done=TRUE;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
if (active)
{
KeyProc();
if (keys[VK_ESCAPE]) // Was ESC Pressed?
{
done=TRUE; // ESC Signalled A Quit
}
else // Not Time To Quit, Update Screen
{
if(gameStart)
{
if(gameOver)gameCount++;
if(gameCount<100)
{
Refresh();
DrawSence(); // Draw The Scene
}
else
{
done=TRUE;
}
}
else
{
DrawTitle();
}
}
}
while((GetTickCount()-start_time)<30){sleep(0);};
fps=(float)1000.0/((GetTickCount()-start_time)+1);
}
}
在while循环下sleep一下呢?应该要一点,但是好象定得不精确了。
kofightas
2004-05-10
打赏
举报
回复
我的程序要用到多线程。
主线程cpu占用率过高会影响子线程的执行效率
whalefish2001
2004-05-10
打赏
举报
回复
其实,我感觉
当游戏在前台的时候,CPU达到100%没有什么。(如果外部有消息进来,OS 还是会处理其他消息的)
不过,要控制在后台运行的时候,或是最小化的时候不要到100%就行。
相信这个容易实现一些吧?
whalefish2001
2004-05-10
打赏
举报
回复
我有个建议,不知道可不可以。
首先,测试机器的CPU频率和显卡性能(如果好的话,可以做好点的纹理,渲染等)。
如果发现过高的话,就做一些处理。
(比如像 allsword(剑七) 所说的 GetTickCount()+移动慢长(不能增加太大)来控制 )
过低的话,也相应的做做处理。
kofightas
2004-05-09
打赏
举报
回复
PeekMessage和GetMessage的区别
GetMessage在没有消息的时候等待消息,cpu当然低
PeekMessage没有消息的时候立刻返回,所以cpu占用率高。
因为游戏不能靠windows消息驱动,所以要用PeekMessage();
to :Vcar(阿猫) 如果用GetMessage的话,应该怎么写?
pengin
2004-05-09
打赏
举报
回复
up
allsword
2004-05-09
打赏
举报
回复
大家不如一起来谈谈太阁的的一些原理是如何实现的,
我一直是以太阁游戏为目标,
也许有点老土,别人都去D3D,我还这个^_^,
太阁从2-4、5, 它好像在窗口下执行的不错,
按钮做的很好,4的窗口全屏转换很完美,
好像没用sleep().
黑羽飘舞
2004-05-08
打赏
举报
回复
主循环尽量用多的语句和尽量少的计算实现
vcar
2004-05-08
打赏
举报
回复
peek的100%,get的就特别低。
加载更多回复(4)
游戏
编程模式之
游戏
循环
要注意的是,在
游戏
循环
中不会出现类似UI事件
循环
中的阻塞,即使你不输入,
游戏
依旧在运行着
游戏
循环
。 试着将
游戏
逻辑简化为输入处理ProcessInput()、逻辑更新LogicUpdate()、画面渲染Render()、物理更新...
四种常见
游戏
循环
实现方式
最基本的
游戏
循环
bool game_is_running = true; while(game_is_running){ update_game()执行;...关于
游戏
循环
事件的术语: FPS:FPS是Frames Per Second的缩写。在上述实现的上下文中,它是每秒调用display_...
C#开发Unity
游戏
教程
循环
遍历做出判断及Unity
游戏
示例
C#开发Unity
游戏
教程
循环
遍历做出判断及Unity
游戏
示例
python
循环
语句for
循环
十次_python
循环
10次
写法
以及实例代码
python
循环
10次怎么写Python for
循环
可以遍历任何序列的项目,如一个列表或者一个字符串。语法:for
循环
的语法格式如下:for iterating_var in sequence:statements(s)例子:for i in range(10):print("php.cn")输出...
最详细小白入门Python22-死
循环
死
循环
不是bug,是程序的一种特殊运行状态,程序员可以用死
循环
做很多事情 ...# 猜拳
游戏
(死
循环
进阶版) # 需求:在原来猜拳
游戏
的基础上,让电脑和玩家进行猜拳,一方达到3分则退出
游戏
,宣布获胜方,否则
游戏
持..
游戏开发
8,325
社区成员
23,684
社区内容
发帖
与我相关
我的任务
游戏开发
游戏开发相关内容讨论专区
复制链接
扫一扫
分享
社区描述
游戏开发相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章