小弟我在学directx,在玩一个Tank小游戏的时候,发现全屏的时候运行正常,转到窗口模式Tank就跑得飞快,后来发现全屏下面fps大约60,窗口时高达300fps, 后来编程发现全屏下面刷新率总是大约60fps左右,有大虾能帮忙解释一下吗?
1。全屏下面能超过60,达到100以上的fps吗? 中午有人说可以设置,不知道怎么设置?
2。为什么两种情况下差距这么大?
3。有一个函数SetDisplayMode里面有一个设置刷新率的参数,这会影响到全屏下的directx程序的刷新率吗?(没有书上涉及到)

解决方案 »

  1.   

    全屏下 窗口刷新你用的一定是 Flip()Flip交换页面只有在回扫的时候才会发生,因为显示器的刷新率的限制, 一般都不会大于100Hz.
    你的帧速也就不可能大于显示器的这个刷新率了.而在窗口模式下, 是不能用Flip来进行页交换的. 你一定是用 Blt或者BltFast来实现双缓冲的. 而这两个函数并不是交换实际的页面,而只是将后缓冲的像素数据拷贝到主表面. 这个拷贝操作可以发生在任何时候.如果你的游戏处理图像足够的快,那么每秒刷新几百帧是没有问题的.不会受到显示器的刷新率的限制.
      

  2.   

    这么说,我把显示器的刷新率调到100hz以上(我的显卡最大能调到200),那么在全屏下面就能达到fps为100了吗? 不过我试了一下,好像fps老是60左右,并没有增加,这是为什么呢? 我玩一个小游戏的时候,正好他可以显示fps,发现他显示的fps是100,怎么样才能增加全屏下的刷新率呢?
      

  3.   

    directx做全屏处理的时候,屏幕刷新率是通过枚举后,可以选择的
    应该是你没有选择,缺省的就是60帧
    CreateDevice的时候,在D3DPRESENT_PARAMETERS参数当中指定的
      

  4.   

    把FullScreen_RefreshRateInHz 这个参数设置为
    D3DPRESENT_RATE_UNLIMITED 
    就可以按照显示卡所支持的最大速度刷新的了。
      

  5.   

    这么说,只有direct3d中才有控制刷新率的接口函数了?那么在directdraw里面能行吗?好像没有耶,
    这么说要学3d编程了?好像比较难懂,大虾能推荐几本3d方面的书看看吗?
      

  6.   

    ddraw当中也有的啊
    不过ddraw是dx7时候的产物,后续版本当中在这个方面描述的就少了。
    记得有一个枚举设备的例子,里面就演示了的。
      

  7.   

    现在那里可以下到dx7的完整sdk(包括里面的demo和源码呀?)微软的好像下不了了。
      

  8.   

    http://www.netyi.net/in.asp?id=lockllb
    //也许在这里你可以找到答案----计算机的天堂!大家都来看看,有好处!
      

  9.   

    首先,fps是用来测试游戏速度的,他一方面和游戏本身有关, 所以并不是你屏幕刷新率多高他就多高;
    其次, 如果全屏幕模式下,调用Flip函数,这个函数参数默认由等待垂直同步(也就是你屏幕刷新),所以此时fps不会高于你屏幕刷新率,你可以加上“不要等待垂直同步“,这才是反应游戏的真实性能;
    再次, 窗口模式下,是blt到主表面的,就不存在以上问题了。
      

  10.   

    按bshao说的我改了一下,但是好像每隔一段时间刷新就会突然慢一下,然后又恢复,不知道什么造成了刷新的不稳定?有什么办法可以解决?