游戏开发论坛

 找回密码
 立即注册
搜索
查看: 16912|回复: 26

关于vb延时的问题

[复制链接]

41

主题

242

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
发表于 2007-8-5 10:47:00 | 显示全部楼层 |阅读模式
高深的东西没办法,还得到这里来问。
具体应用在锁定fps上。
我现在的方法是
用sleep把每桢空余的时间补上。
结果呢,sleep(1)和sleep(15)的效果是一样的,也就是精度在15ms.
如果要将fps锁定在60桢,那么每秒应该延迟16ms,如果每桢工作时间是10ms,那么结果总共延迟了25ms,严重超出。
所以现在希望有一种更精确的延时函数。

如果用一个死循环,比如
QueryPerformanceFrequency();
QueryPerformanceCounter();  
timeGetTime
GetTickCount

用上面的方法都会导致cpu占用率达到100%,结果导致cpu非常的热。

所以还希望这种方法不要太占用cpu。我看过有的游戏程序可以吧fps控制在60.00左右浮动,并且占用cpu在20%左右,这是如何做到的?

0

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2007-8-5 11:15:00 | 显示全部楼层

Re:关于vb延时的问题

MMRESULT timeGetDevCaps(
  LPTIMECAPS ptc,  
  UINT cbtc        
);
http://msdn2.microsoft.com/en-us/library/ms713416.aspx

MMRESULT timeBeginPeriod(
  UINT uPeriod  
);
http://msdn2.microsoft.com/en-us/library/ms713413.aspx

MMRESULT timeEndPeriod(
  UINT uPeriod  
);
http://msdn2.microsoft.com/en-us/library/ms713415.aspx
后两个是用来调整tick的精度的,也就是影响Sleep(UINT)等用tick定时的
用之前应该用timeGetDevCaps获得支持的精度

61

主题

1429

帖子

1430

积分

金牌会员

Rank: 6Rank: 6

积分
1430
发表于 2007-8-5 12:02:00 | 显示全部楼层

Re: Re:关于vb延时的问题

大兵潜?焱? Re:关于vb延时的问题

MMRESULT timeGetDevCaps(
  LPTIMECAPS ptc,  
  UINT cbtc        
);
http://msdn2.microsoft.com/e...


冒牌货你这是VB吗

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-8-5 14:10:00 | 显示全部楼层

Re: Re: Re:关于vb延时的问题

使命召唤: Re: Re:关于vb延时的问题



冒牌货你这是VB吗

只要能解释清楚问题,是不是VB的代码有什么关系呢?

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-8-5 14:51:00 | 显示全部楼层

Re:关于vb延时的问题

是啊,LZ提问的时候也不是用的VB……

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-8-5 15:40:00 | 显示全部楼层

Re: Re: Re: Re: Re:关于vb延时的问题

使命召唤: Re: Re: Re: Re:关于vb延时的问题

这里是VB区,不过我知道C++区的人比VB区的人烂多了,你可以去告诉他们。是我说的,
基本的游戏都不懂做,失败!
真的懂C++的人还会来VB区混吗? 丢死人了。自己在C++区没本事,
作品区那个魔兽DEMO有多少人要代码的? 可见会C++的人水平如何

嗯,说真的,我们这个VB区看不懂C++代码的好像只有您一个了,要加油啊~~~

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2007-8-5 15:43:00 | 显示全部楼层

Re: Re: Re: Re: Re:关于vb延时的问题

使命召唤: Re: Re: Re: Re:关于vb延时的问题



这里是VB区,不过我知道C++区的人比VB区的人烂多了,你可以去告诉他们。是我说的,
基本的游戏都不懂做...

教训得是 [em1]

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-8-5 15:45:00 | 显示全部楼层

Re: Re: Re: Re: Re: Re:关于vb延时的问题

Miu.C: Re: Re: Re: Re: Re:关于vb延时的问题


嗯,说真的,我们这个VB区看不懂C++代码的好像只有您一个了,要加油啊~~~


说得一点不错!!!

0

主题

25

帖子

25

积分

注册会员

Rank: 2

积分
25
发表于 2007-8-5 16:48:00 | 显示全部楼层

Re: Re: Re:关于vb延时的问题

使命召唤: Re: Re:关于vb延时的问题
冒牌货你这是VB吗


这些仅仅是API函数,vb6也可以使用。我是直接从msdn中找过来,贴到这里的。
你是要我帮忙把它翻译成vb6的吗?

声明(vb6):
Type TIMECAPS
  min As Long
  max As Long
End Type

Declare Function timeGetDevCaps Lib "winmm" (ByRef ptc As TIMECAPS, ByVal cbtc As Long) As Long
Declare Function timeBeginPeriod Lib "winmm" (ByVal uPeriod As Long) As Long
Declare Function timeEndPeriod Lib "winmm" (ByVal uPeriod As Long) As Long

注:返回0是说明没有错误发生
原来32位无符号整数换成了vb6的Long,所以timeGetDevCaps的cbtc还是传给 8

15

主题

2093

帖子

2093

积分

金牌会员

Rank: 6Rank: 6

积分
2093
发表于 2007-8-5 17:02:00 | 显示全部楼层

Re: 关于vb延时的问题

reity: 关于vb延时的问题

结果呢,sleep(1)和sleep(15)的效果是一样的,也就是精度在15ms.
如果要将fps锁定在60桢,那么每秒应该延迟16ms,如果每桢工作时间是10ms,那么结果总共延迟了25ms,严重超出。


很简单,假如延时超过了需要的时间,那么在下一帧少延时一次,只要能保持总体的准确就行了

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-25 11:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表