首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

诚心请问:一个用DirectX3d9做的游戏,刷新率为什么这么低

2012-02-26 
诚心请教:一个用DirectX3d9做的游戏,刷新率为什么这么低?我的游戏循环是这样的://游戏循环while(TRUE){if(

诚心请教:一个用DirectX3d9做的游戏,刷新率为什么这么低?
我的游戏循环是这样的:
//游戏循环
while(TRUE){
        if   (PeekMessage(&msg,   NULL,   0,   0,   PM_NOREMOVE)){      
                if   (0   ==   GetMessage(&msg,   NULL,   0,   0)){
                        return   (int)msg.wParam;
                }
              TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
        tNow   =   GetTickCount();//取得系统当前时间  
        tInterval   =   tNow   -   tLastFrame;
        //刷新前的事件处理
        if(   !m_listener-> FrameStartEvent(tInterval)   ){//如果刷新事件返回值为假
                break;  
        }
        //刷新部分
        D3DDEVICE-> Clear(   0   ,   0   ,   D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER   ,   D3DCOLOR_XRGB(0,0,0)   ,   1.0f   ,   0   );
        D3DDEVICE-> BeginScene();
        m_listener-> Render();
        D3DDEVICE-> EndScene();
        D3DDEVICE-> Present(NULL,   NULL,   NULL,   NULL);//刷新
        //刷新后的事件处理
        if(   !m_listener-> FrameEndEvent(tInterval)   ){//如果刷新事件返回值为假
                  break;
        }
        tLastFrame   =   tNow;
}
我把前后时间处理函数和刷新函数基本都架空了,只剩下贴了一串文字显示刷新率和计算刷新率的式子.但显示出来的刷新率却只在33到50之间徘徊.为什么会这么慢呢?
另外这是D3D创建的函数,各位大大们看看有没问题
//建立绘图设备
D3DPRESENT_PARAMETERS   d3dpp;
memset(   &d3dpp   ,   0   ,   sizeof(   d3dpp   ));
d3dpp.Windowed   =   isWindows;
d3dpp.BackBufferFormat   =   d3ddm.Format;
d3dpp.BackBufferCount   =   1;//后备缓冲的数目
d3dpp.BackBufferWidth   =   SCREENPELSX;//后备缓冲的宽度和高度
        d3dpp.BackBufferHeight   =   SCREENPELSY;
d3dpp.SwapEffect   =   D3DSWAPEFFECT_DISCARD;//交换缓冲支持的效果类型
d3dpp.hDeviceWindow   =   HWINDOW   ;//显示设备输出窗口的句柄
d3dpp.Flags   =   D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;
        d3dpp.AutoDepthStencilFormat   =   D3DFMT_D16;
        d3dpp.EnableAutoDepthStencil   =   TRUE;

if(   D3D-> CreateDevice(   D3DADAPTER_DEFAULT   ,  
D3DDEVTYPE_HAL   ,   HWINDOW   ,   D3DCREATE_HARDWARE_VERTEXPROCESSING   ,  
&d3dpp   ,   &D3DDEVICE   )   !=   D3D_OK   )



[解决办法]
看sdk当中的描述
d3dpp.PresentationInterval 他控制刷新速度
The maximum rate at which the swap chain 's back buffers can be presented to the front buffer. For a detailed explanation of the modes and the intervals that are supported, see D3DPRESENT.
这块你怎么设置的

按照你的做法: memset( &d3dpp , 0 , sizeof( d3dpp ));
这个PresentationIntrval的数值就是 D3DPRESENT_INTERVAL_ONE
显示器的刷新速度就是你的窗口刷新上限了


你可以设置成为: D3DPRESENT_INTERVAL_IMMEDIATE 无限刷新

热点排行