游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3434|回复: 10

[请教问题]关于DirectInput延迟或者掉帧

[复制链接]

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2006-1-11 00:11:00 | 显示全部楼层 |阅读模式
我使用的是DI8。
写了一个用Directinput读取鼠标来控制视野(类似CS,Quake)的程序。
当我不限制FPS的时候(也就是我的机器可以运行到300多的FPS),一切运行正常。
但是当我限制一下FPS(限制到100左右),就感觉有不连贯了,好像FPS 30 都不到的感觉。
但是可以确定程序FPS实际为所限制的100。而且其实只要不用鼠标控制也很流畅。
所以我发觉是用DirectInput控制鼠标的问题。我使用的是立即模式,每帧读取一次鼠标pDIMouse->GetDeviceState。是不是和这个有关系?
是不是改用缓冲模式就可以?
麻烦高手指教。

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-1-11 10:01:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

这个问题我遇到过,很有趣

跟DI函数没有任何关系,你的机子能跑300FPS,那限制为100的话说明有三分之二的时间

你的程序不做任何事情,可能包括检查你的鼠标输入,如果你的机子没有100FPS这个问题反

而不存在。所以让CPU空闲时也要检查鼠标就可以了

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2006-1-16 13:11:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

那我就不明白为什么这2/3的时间不做事情光浪费CPU时间就会这样呢?那么如果我真的有事情要做(而非浪费CPU时间来限制FPS的话)导致FPS到100,那么还会这样吗?
我觉得应该是一样的阿。我是每Frame读取一下鼠标的

15

主题

90

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2006-1-16 21:47:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

问题就出在你用的是立即模式了
改用缓冲的就可以了~

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2006-1-16 22:10:00 | 显示全部楼层

Re: Re:[请教问题]关于DirectInput延迟或者掉帧

linshiki: Re:[请教问题]关于DirectInput延迟或者掉帧

问题就出在你用的是立即模式了
改用缓冲的就可以了~

有个问题:立即模式(相对)取得的是不是相对于上次调用GetDeviceState后的Offset呢?
那么如果是的话,那么改用了缓冲模式自己对n个缓冲数据进行累加不是一样吗?(比如缓冲区大小64,某帧读取结果中有24个是鼠标X方向移动的数据,那么我把他们加起来的结果和GetDeviceState的结果不是一样吗?)

15

主题

90

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2006-1-17 18:56:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

这个问题其实我也不知道!
但是我可以猜   然后把猜的结果告诉你~(我猜一般相当的准~HOHO)
我想大概不是只缓冲上一次的数据吧!  而是把所有数据缓冲起来,那样数据就不会丢失了阿~

立即模式是每帧接收一次键盘消息,所以会丢失操作~

我是胡说的  胡说!

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2006-1-19 17:44:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

缓冲模式虽然是有一定容量的数据了,但是也不是要在一帧里面处理吗?
好像没有区别的呀

15

主题

90

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2006-1-19 18:47:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

肯定是有区别的  如果没区别就必要弄两种方式了呢*_^

你用缓冲模式就对了   我大概知道他们的差别但是我表达不出来……

非要叫我说的话就这么说吧:

立即模式每帧接收一次输入,期间有间隔所以有些数据就丢失了,而缓冲模式一直都在接收你的数据,所以所有数据都不会丢失,缓冲模式的缺点是有可能会溢出~

1

主题

7

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2006-1-20 16:40:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

我现在主要考虑鼠标的X,Y方向。我觉得没有区别阿。
因为立即模式是说每次返回相对于上次的Offset,比如我两帧之间鼠标X方向移动了30个unit,那么调用一次GetDeviceState的X就返回30咯。
那么如果用缓冲模式,比如这个总的30是体现在5次的移动中(缓冲中有5个关于X方向的数据(DIMOFS_X)),比如每次都是6,那么我自己将他们加起来也不就是30吗?
我知道对于其他的按键,比如左键,那么是有意义的。但是对于X,Y方向我就不能理解了,麻烦可以解释的详细些吗?

15

主题

90

帖子

90

积分

注册会员

Rank: 2

积分
90
发表于 2006-1-20 17:45:00 | 显示全部楼层

Re:[请教问题]关于DirectInput延迟或者掉帧

有没有高手来回答一下吧   其实我也是刚学这些也不是很懂~*_!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-23 06:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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