为什么DirectX做的游戏,操作感总是不如Windows原生程序?
2011-08-24 13:49
513 查看
感觉DirectX做的程序,类似Button压下/鼠标移动这些操作总是没有Windows程序那种流畅感,为什么?
我也知道DirectX程序一般会用某些UI库来实现UI控件,所以我的问题就是这些UI库为什么不如Windows原生UI那么爽,到底差在哪里?
比如,点击Button,Windows程序我有一种button被按下去了的感觉;DirectX程序就让人觉得那个button很硬,摁不动。
用黄卓宜的话说,就是“按键或鼠标移动时有飘浮感”
理论上,通过directX来调用各种设备和IO接口是会比直接通windows接口要慢一点,毕竟多了一层。但这个延迟应该也不是人类能感觉得出来的了。。。另外windows程序的界面大部分也是通过各种界面函数库来实现的,所以应该也是有延迟的。唯一可以解释楼主说directX游戏不流畅的原因,我想可能是因为游戏要加载各种资源文件,需要硬盘读取,如果资源加载算法不好,可能会在操作的时候产生延迟,影响体验。
玩游戏时的确有过类似的感觉,我想有两个可能的原因:
原生程序具有比DirectX更高的执行优先权。毕竟DirectX是跑在系统上的,系统肯定优先执行自己层面的命令,而更表面层的命令则要经过底层执行,因此显得稍慢。不过我认为这块引起的影响比较小,如果不是在系统运行效率比较差的情况下测试,体感应该不明显。
游戏本身为了达到广泛兼容性的需要。我认为更多时候是游戏故意设计让按钮等UI内容反馈稍慢。因为桌面系统是一个开放平台,每个主机之间的性能肯定会有差异,如果在设计的时候让所有UI命令都以最快速度执行,就会影响游戏在不同电脑上的游戏体验,从而造成游戏表现甚至规则上的差异(电脑快的玩家如果每次少显示几帧的UI,累加起来会有大量的时间差异),因此工程师一般会针对这一点做一些限速,以便让各种平台上的体验达到尽量的统一。
之所以会有DirectX,是因为传统GUI无法满足游戏对于速度的要求。DirectX使得游戏能够直接从硬件中获得信息,所以DirectX要比GUI快得多。
但是一些游戏的界面操作感确实没有普通Windows程序好,
其主要原因是普通windows程序的界面渲染(如按下按钮的动画效果)由微软开发。微软在这上面花费了大量的资源进行优化。而DirectX的界面需要游戏公司自己实现,而界面并不是游戏的关键部分,不少公司就不那么认真对待了。
事实上,从windows vista以后, 微软的GUI界面上也大量的使用DirectX进行渲染(比如窗口的玻璃效果),一样能够得到非常好的体验。
我也知道DirectX程序一般会用某些UI库来实现UI控件,所以我的问题就是这些UI库为什么不如Windows原生UI那么爽,到底差在哪里?
比如,点击Button,Windows程序我有一种button被按下去了的感觉;DirectX程序就让人觉得那个button很硬,摁不动。
用黄卓宜的话说,就是“按键或鼠标移动时有飘浮感”
理论上,通过directX来调用各种设备和IO接口是会比直接通windows接口要慢一点,毕竟多了一层。但这个延迟应该也不是人类能感觉得出来的了。。。另外windows程序的界面大部分也是通过各种界面函数库来实现的,所以应该也是有延迟的。唯一可以解释楼主说directX游戏不流畅的原因,我想可能是因为游戏要加载各种资源文件,需要硬盘读取,如果资源加载算法不好,可能会在操作的时候产生延迟,影响体验。
玩游戏时的确有过类似的感觉,我想有两个可能的原因:
原生程序具有比DirectX更高的执行优先权。毕竟DirectX是跑在系统上的,系统肯定优先执行自己层面的命令,而更表面层的命令则要经过底层执行,因此显得稍慢。不过我认为这块引起的影响比较小,如果不是在系统运行效率比较差的情况下测试,体感应该不明显。
游戏本身为了达到广泛兼容性的需要。我认为更多时候是游戏故意设计让按钮等UI内容反馈稍慢。因为桌面系统是一个开放平台,每个主机之间的性能肯定会有差异,如果在设计的时候让所有UI命令都以最快速度执行,就会影响游戏在不同电脑上的游戏体验,从而造成游戏表现甚至规则上的差异(电脑快的玩家如果每次少显示几帧的UI,累加起来会有大量的时间差异),因此工程师一般会针对这一点做一些限速,以便让各种平台上的体验达到尽量的统一。
之所以会有DirectX,是因为传统GUI无法满足游戏对于速度的要求。DirectX使得游戏能够直接从硬件中获得信息,所以DirectX要比GUI快得多。
但是一些游戏的界面操作感确实没有普通Windows程序好,
其主要原因是普通windows程序的界面渲染(如按下按钮的动画效果)由微软开发。微软在这上面花费了大量的资源进行优化。而DirectX的界面需要游戏公司自己实现,而界面并不是游戏的关键部分,不少公司就不那么认真对待了。
事实上,从windows vista以后, 微软的GUI界面上也大量的使用DirectX进行渲染(比如窗口的玻璃效果),一样能够得到非常好的体验。
相关文章推荐
- (转)Windows 支持 DirectX 和 OpenGL,为什么大多数 PC 游戏还是 DirectX 开发?
- C++ DirectX 游戏开发初级视频教程 19 资源下载链接
- 获取联系人照片为什么总是NULL
- 06 十字光标的自由移动-DirectX游戏开发初级教程
- 为什么说Android手机总是越用越慢?
- 为什么人前进的路总是被自己挡住
- 《DirectX 9.0 3D游戏开发编程基础》 第一章 初始化Direct3D 读书笔记
- 为什么你总是学不好Linux技术?这是我的答案
- 用c写了一个向sohu微博发信息的程序,不知为什么发中文时总是乱码?
- 为什么刷机后开发环境的adb不能用了,总是显示设备“offline”?
- 为什么技术与产品沟通起来总是那么痛苦
- 来自知乎的pthread_cond_wait为什么总是带着mutex
- 为什么我在CS文件中用JS中的Alert,时,页面背景总是变白?
- 菜鸟学堂:为什么我的C盘那么大?总是磁盘空间不够用?
- TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处,而且还很有用)
- 为什么有些人加班累死还不如有些人轻轻松松赚钱多(续)(转)
- 为什么Android手机总是越用越慢?
- DirectX 11游戏编程学习笔记之5: 第4章Direct3D Initialization(Direct3D初始化)
- 为什么不用C++写游戏(聪明的程序员不用C++折磨自己)(这些工作,QT都替开发者解决了,C++没有根类导致太多的问题,也没有字符串类)
- 为什么程序员的开发项目总是半途而废?