DirectX 9 UI设计学习笔记之一:开场白+第一章User Interfaces
2014-10-23 16:58
375 查看
大家好!我叫哈大锤,万万没想到我竟然开始学习UI 编程了!学完之后,我就能够设计出一款不错的游戏引擎,然后找到工作,妈妈再也不用担心我的学习了!用不了多久,我就能升职加薪,打败纳德拉,追上比尔·盖茨,赢取小度娘,走上人生巅峰!嘿嘿,想想还真有点小激动呢!
此文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系本人!
邮箱:2024958085@qq.com
可能有人要问了:你丫还有三个坑没填呢,怎么又开新坑啦?在此先对大家说声抱歉,之前的几个坑短期内不会很快更新了(不过如果回复数比较多的话,我可能会改变主意的,嘿嘿!)。这里我要开始一个新的系列,讲的是使用DX 9 进行游戏的UI 设计与实现的。
大家一定会问为何要学习这个?这个说来话长。
比较关注本人的同学应该知道,我有一个终极目标,就是用DX 9 开发出一款值得一玩的RPG!不过这个目标毕竟太难以实现了。我先是参考了Jim Adams 的《Programming Role Playing Games with DirectX 9: 2nd edition》这本书,但是这本书毕竟很老了,而且讲得不太科学(比如说单单是第2章就涵盖了“龙书”第二版花了10章才讲完的内容……),内容不是很好懂,所以我就暂时将它扔在一边了。可能以后适当的时候会参考的——虽然里面的游戏貌似很粗糙,但是涵盖的范围还是挺广的。
然后我基本上就一直在继续学习“龙书”第二版了。不过到了网格那里的时候,遇到了两个问题,一个是跟纹理间的赋值有关的,另外一个是跟网格的Clear 有关的。第一个问题花了我几个星期才搞定,其实是COM 组件的特殊性所导致的;而另一个问题至今没有解决。所以我就对“龙书”第二版有了些许失望,然后我就一拍脑门买了“龙书”的第四版,然后学起了DX 11 编程。
这两个多星期的学习还是挺顺利的。毕竟有了“龙书”第二版的基础,虽然DX 11 相对于DX 9.0c 变化了许多,但是吸收起来是不难的。
不过到了纹理映射那一章,我发现一个不太复杂的、有山有水的、有光线有动态顶点缓存有纹理贴图的场景的帧数只有80多帧了。我学习DX 9.0c 的时候没有载入过这么大的场景,也不确定如果换成DX 9.0c 的话会不会这样慢;但是我对于DX 11 有点不放心了起来。虽然我的电脑比较新,完全支持DX 11,但是毕竟被我玩坏过几次,还是个笔记本,所以我有点不太敢继续往下学了。毕竟,开发游戏的过程中,也许对硬件的要求比到时候实际运行游戏的时候还要高!
所以我又有点想回归DX 9了。另外一个方面是,学了这么久还没有做出来过一个特别好玩的东西,未免有点不耐烦。于是前几天我有了一个大胆的想法,就是开发出一个游戏引擎!
当然,绝对不是虚幻3 那样的引擎了。实际上做一个游戏的同时基本上也就是做一个引擎了,只要你的程序具有某种通用性。我现在最想知道的就是在进行游戏编程的时候,如果对角色和物体的位置进行调节?比如说有一栋三层建筑,如何把一个敌人准确地放置到2楼上?又如果正在做一个迷宫的关卡的话,如何让敌人在某些角落里出现?
用纯粹的数字坐标去指定的话显然不靠谱,因为要修改起来太麻烦了;最好就是有一个可视化的界面,能够让你用一种面对面的方式对载入的模型进行仿射变换(平移、旋转和放缩),就像Blender 等建模软件的界面那样;或者,像孢子冒险编辑器那样的给力的东东。
我如果能够做出来这样的一个东西就好了!我先是看了会《Game Engine Architecture》这本书。好吧,我承认我被这本书的第一章给打败了——尼玛太复杂了啊!看来我能够实现上面的那个小小的愿望就十分了得了!
不过一口气吃个胖子肯定是不行的。我得先了解一些游戏引擎才行啊!其实前面提到的孢子冒险编辑器也是一个游戏引擎了,不过它的限制条件太多。我根据书上的介绍,找到了两个候选的:ORGE 和XNA。我先是打算学习ORGE 的。可是为何连个贴吧都没有?而且下载源文件的时候也不知所措。于是我打算学习XNA 了。这东西有教材,而且据说很简单,嘿嘿!
不过这东西是用C# 来开发游戏的。我只知道C++(很久以前还接触过C,但是忘得差不多了),看来得重新学一门语言了。不过C# 据说特别简单。好吧,那我就放心了!
我学了这三天,发现确实还不错。一开始给的那个Windows Form 程序让我很惊讶,因为这让我想到了很久以前接触到的MFC。其实我也可以为这个专门开辟一个系列的,不过那样的话我的压力太大了,所以就从略了;况且C# 应该也只是我的编程生涯中的一个小插曲而已。另外我发现C# 中竟然没有指针,这让我很诧异,不知道没有指针的它是如何完成各种神奇的操作的。
好了,觉得很累?没关系,前面的都是废话,你可以不看。现在开始说正题!
前面提到,那个Windows Form 的程序让我联想到了MFC,而MFC 与各种控件有关。这时我突然想到了今年9月初我看过几天的一本书,叫做:《DirectX 9 User Interfaces: Design and Implementation》,是Alan Thorn写的。(你猜得没错,就是我们要研究的这本书!)这本书讲的是用DX 9 制作各种UI 界面的,而在游戏编程中,各种UI 界面也是必不可少的。于是我又把这本老书重拾,准备仔细研读了。这一系列博客就是本人研读的心得。
为什么现在要学习UI 界面的设计?你猜对了:一方面,它比较简单,没有用到太多DX 9 中的概念;另一方面,它很有用,不论是在游戏编程还是在游戏引擎设计中;最后,它很有趣!
下面是这本书的封面:
这本书的下载地址很容易找到,本人就不发了。实在找不到的同学请联系我。
这本书比较老了,是2004年的,不过里面的内容并没有过时……吧。书上有些语言比较晦涩难懂,貌似不是面向全世界的,比如说前言部分;不过幸好正文大部分还是很好懂的,至少从我读过的这几章来看是这样。不过这本书就像《Programming Role Playing Games with DirectX 9 2nd edition》一样,网上找不到源代码!(不过,由于本人的慷慨,后者的源代码现在已经有了。)书上的代码自然是不全的,所以读起来有一些困难。所以本人尽量把书上的代码用自己的语言(其实是参考了几本“龙书”的经验)写出来供大家研究。
注意本系列博客并不是这本书的全文翻译。我只是将一些要点和注意事项提出来,更多的还是得大家自己去读书。我在这里的主要任务恐怕还是弄代码了。
还有一件值得注意的事情是,我用的是最新版DX,也就是DirectX SDK June 2010
版,可能有一些东西跟书上的不同。
======================================================================
这一章向我们介绍了UI 的基本概念。既然要设计UI,不对它有一个基本的了解怎么行?老实说,我也是读了这一章之后才知道有这么多种UI 的。推荐大家过一遍。
我把这一章要回答的几个问题列在这里:
1、What is a user interface?(啥是UI
呀?)
2、What is a control?(啥是控件?)
3、What types of controls are there?(有哪些类型的控件?)
4、What are interface flow diagrams?(什么是界面流程图?)
5、What is interface design?(什么是界面设计?)
6、Why is interface design important?(为何界面设计很重要?)
7、Which interface design guidelines are recommended to follow?(我们建议遵循什么样的界面设计准则?)
1、Text Boxes(文本框)。顾名思义。比如说某些游戏一开始让你输入角色名字的小框框。
2、Text Edits(文本编辑器)。是Text Boxes
的升级版。
3、Buttons(按钮)。游戏中不常见。但是用过计算器程序的都知道是怎么回事;对的,就是那些数字键(还有其他的键)。
4、Labels(标签)。最简单的控件之一。就是一些说明类的、不可更改的文本。比如说游戏的技能表中的技能名字。
5、List Boxes(列表框)。提供一列可选择条目的框框。这些条目可以选择任意多个。比如说游戏中的装备列表。
6、Drop-Down Lists(下拉菜单)。和List Boxes
很像,不过有几个主要区别:列表中只能够选择一项,选择完毕后只显示当前所选择的项,并且右端有一个向下的箭头,点击可以展开所有项目。
7、Check Boxes(单选框)。就是一个只能位于两种状态——选中和未选中——之一的条目。可以组成List Boxes。
8、Menus(菜单)。菜单本质上就是程序选项的一个有结构的列表。有两种形式:普通的下拉菜单和按鼠标右键弹出的弹出菜单。
9、Page Controls(页面控件)/Tab Controls。它们用于将UI
分割成相对独立的几个部分。比如说游戏的选项菜单点开后,通常可以看到好几页不同的选项,分别对应画面、声音、输入等等。
10、Windows and Other Containers(窗口和其他容器)。所谓的容器,本质上就是在其边界内包含着其他控件的控件。这里面有父控件(parent
controls)和子控件(child controls)的概念。例子比如退出游戏时提示是否要保存进度的消息窗口。
1、Be Consistent(一致性)。UI
的设计要让用户有一种熟悉感,也就是一是用起来要符合大家的习惯,二是同一个程序中的界面风格要统一。
2、Know Your Audience(了解你的受众)。如果你的用户以菜鸟为主,那么你的程序的UI
要设计地简单易用;如果你的用户有很多高智商人群的话,那么可以加入一些高级选项。
3、Justification and Alignment(对齐)。相互关联的控件在行或列的方向要对齐。此外间距要得当。
4、Grouping Data(对数据分组)。将相关的数据放在同一个地方。Page Controls
在此时就有用武之地了。
5、Error Handling(错误处理)。程序的错误在所难免;当程序出错时,以适当的方式告知用户。
6、Disabling Program Features(禁用程序功能)。将程序目前不可用的功能所对应的控件“变灰”,从而将其禁用。
7、Graphics, Colors, Icons, and Art(图形、颜色、图标和艺术)。总之,图片尽量少用;颜色可以稍微多用一点,但是要用得适当;图标比较好,但是要有一致性,不能够用同一个图标去代表两个不同的操作。
8、Balancing Text and Symbols(让文本与符号平衡)。简言之:保持文本描述简短,并且使用描述性的图形(即图标)。
9、Paths and Navigation(路径和导航)。这里讲了界面流程的重要性。要保证四件事:界面流程符合逻辑;只有在有必要的时候才会从一个界面跳到另一个界面;界面屏幕总是可以退出;除非告知了用户并得到同意,否则不会进行毁灭性操作。
10、Keyboard Support(键盘支持)。虽然大多数界面的操作是由鼠标完成的,而且也更符合直观,但是不应该以牺牲键盘支持为代价。
11、Tool Tips(工具提示)。就是当你的鼠标悬浮于某控件时,会弹出小提示,而鼠标离开的时候,提示会消失。这种功能很有必要(虽然在游戏中几乎没有运用过)。
======================================================================
好啦,这一期就到这里了!希望大家能够喜欢!下一期我们正式讲述DX !
此文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系本人!
邮箱:2024958085@qq.com
开场白
======================================================================可能有人要问了:你丫还有三个坑没填呢,怎么又开新坑啦?在此先对大家说声抱歉,之前的几个坑短期内不会很快更新了(不过如果回复数比较多的话,我可能会改变主意的,嘿嘿!)。这里我要开始一个新的系列,讲的是使用DX 9 进行游戏的UI 设计与实现的。
大家一定会问为何要学习这个?这个说来话长。
比较关注本人的同学应该知道,我有一个终极目标,就是用DX 9 开发出一款值得一玩的RPG!不过这个目标毕竟太难以实现了。我先是参考了Jim Adams 的《Programming Role Playing Games with DirectX 9: 2nd edition》这本书,但是这本书毕竟很老了,而且讲得不太科学(比如说单单是第2章就涵盖了“龙书”第二版花了10章才讲完的内容……),内容不是很好懂,所以我就暂时将它扔在一边了。可能以后适当的时候会参考的——虽然里面的游戏貌似很粗糙,但是涵盖的范围还是挺广的。
然后我基本上就一直在继续学习“龙书”第二版了。不过到了网格那里的时候,遇到了两个问题,一个是跟纹理间的赋值有关的,另外一个是跟网格的Clear 有关的。第一个问题花了我几个星期才搞定,其实是COM 组件的特殊性所导致的;而另一个问题至今没有解决。所以我就对“龙书”第二版有了些许失望,然后我就一拍脑门买了“龙书”的第四版,然后学起了DX 11 编程。
这两个多星期的学习还是挺顺利的。毕竟有了“龙书”第二版的基础,虽然DX 11 相对于DX 9.0c 变化了许多,但是吸收起来是不难的。
不过到了纹理映射那一章,我发现一个不太复杂的、有山有水的、有光线有动态顶点缓存有纹理贴图的场景的帧数只有80多帧了。我学习DX 9.0c 的时候没有载入过这么大的场景,也不确定如果换成DX 9.0c 的话会不会这样慢;但是我对于DX 11 有点不放心了起来。虽然我的电脑比较新,完全支持DX 11,但是毕竟被我玩坏过几次,还是个笔记本,所以我有点不太敢继续往下学了。毕竟,开发游戏的过程中,也许对硬件的要求比到时候实际运行游戏的时候还要高!
所以我又有点想回归DX 9了。另外一个方面是,学了这么久还没有做出来过一个特别好玩的东西,未免有点不耐烦。于是前几天我有了一个大胆的想法,就是开发出一个游戏引擎!
当然,绝对不是虚幻3 那样的引擎了。实际上做一个游戏的同时基本上也就是做一个引擎了,只要你的程序具有某种通用性。我现在最想知道的就是在进行游戏编程的时候,如果对角色和物体的位置进行调节?比如说有一栋三层建筑,如何把一个敌人准确地放置到2楼上?又如果正在做一个迷宫的关卡的话,如何让敌人在某些角落里出现?
用纯粹的数字坐标去指定的话显然不靠谱,因为要修改起来太麻烦了;最好就是有一个可视化的界面,能够让你用一种面对面的方式对载入的模型进行仿射变换(平移、旋转和放缩),就像Blender 等建模软件的界面那样;或者,像孢子冒险编辑器那样的给力的东东。
我如果能够做出来这样的一个东西就好了!我先是看了会《Game Engine Architecture》这本书。好吧,我承认我被这本书的第一章给打败了——尼玛太复杂了啊!看来我能够实现上面的那个小小的愿望就十分了得了!
不过一口气吃个胖子肯定是不行的。我得先了解一些游戏引擎才行啊!其实前面提到的孢子冒险编辑器也是一个游戏引擎了,不过它的限制条件太多。我根据书上的介绍,找到了两个候选的:ORGE 和XNA。我先是打算学习ORGE 的。可是为何连个贴吧都没有?而且下载源文件的时候也不知所措。于是我打算学习XNA 了。这东西有教材,而且据说很简单,嘿嘿!
不过这东西是用C# 来开发游戏的。我只知道C++(很久以前还接触过C,但是忘得差不多了),看来得重新学一门语言了。不过C# 据说特别简单。好吧,那我就放心了!
我学了这三天,发现确实还不错。一开始给的那个Windows Form 程序让我很惊讶,因为这让我想到了很久以前接触到的MFC。其实我也可以为这个专门开辟一个系列的,不过那样的话我的压力太大了,所以就从略了;况且C# 应该也只是我的编程生涯中的一个小插曲而已。另外我发现C# 中竟然没有指针,这让我很诧异,不知道没有指针的它是如何完成各种神奇的操作的。
好了,觉得很累?没关系,前面的都是废话,你可以不看。现在开始说正题!
前面提到,那个Windows Form 的程序让我联想到了MFC,而MFC 与各种控件有关。这时我突然想到了今年9月初我看过几天的一本书,叫做:《DirectX 9 User Interfaces: Design and Implementation》,是Alan Thorn写的。(你猜得没错,就是我们要研究的这本书!)这本书讲的是用DX 9 制作各种UI 界面的,而在游戏编程中,各种UI 界面也是必不可少的。于是我又把这本老书重拾,准备仔细研读了。这一系列博客就是本人研读的心得。
为什么现在要学习UI 界面的设计?你猜对了:一方面,它比较简单,没有用到太多DX 9 中的概念;另一方面,它很有用,不论是在游戏编程还是在游戏引擎设计中;最后,它很有趣!
下面是这本书的封面:
这本书的下载地址很容易找到,本人就不发了。实在找不到的同学请联系我。
这本书比较老了,是2004年的,不过里面的内容并没有过时……吧。书上有些语言比较晦涩难懂,貌似不是面向全世界的,比如说前言部分;不过幸好正文大部分还是很好懂的,至少从我读过的这几章来看是这样。不过这本书就像《Programming Role Playing Games with DirectX 9 2nd edition》一样,网上找不到源代码!(不过,由于本人的慷慨,后者的源代码现在已经有了。)书上的代码自然是不全的,所以读起来有一些困难。所以本人尽量把书上的代码用自己的语言(其实是参考了几本“龙书”的经验)写出来供大家研究。
注意本系列博客并不是这本书的全文翻译。我只是将一些要点和注意事项提出来,更多的还是得大家自己去读书。我在这里的主要任务恐怕还是弄代码了。
还有一件值得注意的事情是,我用的是最新版DX,也就是DirectX SDK June 2010
版,可能有一些东西跟书上的不同。
======================================================================
第1章 User Interfaces(用户界面)
======================================================================这一章向我们介绍了UI 的基本概念。既然要设计UI,不对它有一个基本的了解怎么行?老实说,我也是读了这一章之后才知道有这么多种UI 的。推荐大家过一遍。
我把这一章要回答的几个问题列在这里:
1、What is a user interface?(啥是UI
呀?)
2、What is a control?(啥是控件?)
3、What types of controls are there?(有哪些类型的控件?)
4、What are interface flow diagrams?(什么是界面流程图?)
5、What is interface design?(什么是界面设计?)
6、Why is interface design important?(为何界面设计很重要?)
7、Which interface design guidelines are recommended to follow?(我们建议遵循什么样的界面设计准则?)
第1.1 节 User Interfaces---- What Are They?(用户界面——它们是啥?)
这一节讲了UI 的基本概念。想必用过Windows操作系统(或者很多其他操作系统)的同学都知道UI 是什么。这里就不赘述了。
第1.2 节 Controls---- Gadgets and Gizmos
这一节介绍了组成用户界面的基本单元——控件(Controls)。这里面一共列举了如下几种控件:1、Text Boxes(文本框)。顾名思义。比如说某些游戏一开始让你输入角色名字的小框框。
2、Text Edits(文本编辑器)。是Text Boxes
的升级版。
3、Buttons(按钮)。游戏中不常见。但是用过计算器程序的都知道是怎么回事;对的,就是那些数字键(还有其他的键)。
4、Labels(标签)。最简单的控件之一。就是一些说明类的、不可更改的文本。比如说游戏的技能表中的技能名字。
5、List Boxes(列表框)。提供一列可选择条目的框框。这些条目可以选择任意多个。比如说游戏中的装备列表。
6、Drop-Down Lists(下拉菜单)。和List Boxes
很像,不过有几个主要区别:列表中只能够选择一项,选择完毕后只显示当前所选择的项,并且右端有一个向下的箭头,点击可以展开所有项目。
7、Check Boxes(单选框)。就是一个只能位于两种状态——选中和未选中——之一的条目。可以组成List Boxes。
8、Menus(菜单)。菜单本质上就是程序选项的一个有结构的列表。有两种形式:普通的下拉菜单和按鼠标右键弹出的弹出菜单。
9、Page Controls(页面控件)/Tab Controls。它们用于将UI
分割成相对独立的几个部分。比如说游戏的选项菜单点开后,通常可以看到好几页不同的选项,分别对应画面、声音、输入等等。
10、Windows and Other Containers(窗口和其他容器)。所谓的容器,本质上就是在其边界内包含着其他控件的控件。这里面有父控件(parent
controls)和子控件(child controls)的概念。例子比如退出游戏时提示是否要保存进度的消息窗口。
第1.3 节 InterfaceFlow Diagrams ---- Interfaces on Paper
这里讲到用流程图来表示一个程序的用户界面的组成是很重要的!第1.4 节 InterfaceDesign ---- Tips and Tricks
这一节讲了设计UI 时的一些建议和窍门:1、Be Consistent(一致性)。UI
的设计要让用户有一种熟悉感,也就是一是用起来要符合大家的习惯,二是同一个程序中的界面风格要统一。
2、Know Your Audience(了解你的受众)。如果你的用户以菜鸟为主,那么你的程序的UI
要设计地简单易用;如果你的用户有很多高智商人群的话,那么可以加入一些高级选项。
3、Justification and Alignment(对齐)。相互关联的控件在行或列的方向要对齐。此外间距要得当。
4、Grouping Data(对数据分组)。将相关的数据放在同一个地方。Page Controls
在此时就有用武之地了。
5、Error Handling(错误处理)。程序的错误在所难免;当程序出错时,以适当的方式告知用户。
6、Disabling Program Features(禁用程序功能)。将程序目前不可用的功能所对应的控件“变灰”,从而将其禁用。
7、Graphics, Colors, Icons, and Art(图形、颜色、图标和艺术)。总之,图片尽量少用;颜色可以稍微多用一点,但是要用得适当;图标比较好,但是要有一致性,不能够用同一个图标去代表两个不同的操作。
8、Balancing Text and Symbols(让文本与符号平衡)。简言之:保持文本描述简短,并且使用描述性的图形(即图标)。
9、Paths and Navigation(路径和导航)。这里讲了界面流程的重要性。要保证四件事:界面流程符合逻辑;只有在有必要的时候才会从一个界面跳到另一个界面;界面屏幕总是可以退出;除非告知了用户并得到同意,否则不会进行毁灭性操作。
10、Keyboard Support(键盘支持)。虽然大多数界面的操作是由鼠标完成的,而且也更符合直观,但是不应该以牺牲键盘支持为代价。
11、Tool Tips(工具提示)。就是当你的鼠标悬浮于某控件时,会弹出小提示,而鼠标离开的时候,提示会消失。这种功能很有必要(虽然在游戏中几乎没有运用过)。
======================================================================
好啦,这一期就到这里了!希望大家能够喜欢!下一期我们正式讲述DX !
相关文章推荐
- DirectX 9 UI设计学习笔记之三:第4章Introducing DirectInput+第5章Wrapping Direct3D
- DirectX 9 UI设计学习笔记之二:第2章Introducing DirectX+第3章Introducing Direct3D
- DirectX 11游戏编程学习笔记之1: 开场白
- DirectX 9 UI设计学习笔记之三:第4章Introducing DirectInput+第5章Wrapping Direct3D
- DirectX 11游戏编程学习笔记之1: 开场白
- ASM学习笔记--ASM 4 user guide 第一章翻译
- DirectX 11游戏编程学习笔记之1: 开场白
- ASM学习笔记--ASM 4 user guide 第一章翻译
- 代码阅读方法与实践_学习笔记:第一章导论
- XML学习笔记-第一章 XML知识初始化
- Spring in Action 学习笔记—第一章开始Spring之旅
- 《COM原理及应用》学习笔记之第一章
- c++学习笔记第一章
- Oracle编程艺术学习笔记 - 第一章
- [转载]学习笔记《.NET框架程序设计(修订版)》--第一章 Microsoft .NET框架开发平台体系架构(2)
- [转载]学习笔记《.NET框架程序设计(修订版)》--第一章 Microsoft .NET框架开发平台体系架构(1)
- 《COM原理及应用》学习笔记之第一章
- [系统分析师教程][学习笔记] 第一章 概述
- 学习数据结构的笔记(第一章)
- windows程序设计第一章学习笔记