用D3D写文本框控件处理输入的字符一般用不用DirectInput?
我在用D3D写编辑框控件,就像游戏里的聊天框一样,处理用户输入的字符。
我发现,如果要用DirectInput的键盘扫描码来判断用户输入了一个什么字符(比如小写的a或是大写的P)的话,
需要做以下几个步骤:
1:将DirectInput扫描码转换成ASCII码。
2:作如下判断:
1:CapsLock未被锁定,并且Shift未被按下:小写
2:CapsLock被锁定,并且Shift被按下:小写
3:CapsLock被锁定,并且Shift未被按下:大写
4:CapsLock未被锁定,并且Shift被按下:大写
这样我才能最终确定用户输入了一个什么字符!
结果渲染这个字符的性能非常差。
而如果用windows的消息来处理的话,直接把窗口函数的wParam值转换成字符就可以了。一个函数都不调用。
另外对于用户输入的汉字,我是用IME相关API来处理的,同样要用windows的窗口函数。
那这样的话,就用不着DirectInput了?
我是感觉这么多东西全用窗口函数来处理的话,会不会影响到D3D的渲染速度??
一般是如何做的?
[解决办法]
就用Windows的消息吧,感觉要好些
[解决办法]
楼主终于作出了明智的选择。祝你成功!
[解决办法]
如果消息循环结构写的好的话,不会发生降低效率的问题
建议每次主循环都先处理一遍消息,再调用渲染函数。
渲染函数不要写在else内,因为渲染不需要条件,每次主循环至少要渲染一次
[解决办法]
如果是纯键盘输入,而不需要游戏手柄的话,处理输入用DirectInput比Windows消息模式几乎没有任何优势。
在GameDev和MSDN上有两篇比较DI和WM的文章。
具体见:
http://www.gamedev.net/community/forums/mod/journal/journal.asp?jn=300672&reply_id=3074105
http://msdn.microsoft.com/en-us/library/ee418864(VS.85).aspx