GDC - Storytelling with Verbs:Integrating Gameplay and Narrative
用动词讲故事:整合游戏玩法和叙事
玩家会做什么?
叙事的设计取决于玩家在游戏中做了哪些内容
游戏中的动词决定了玩家在这个世界中的行为方式,从而决定游戏行为,虽然游戏玩法并不会给出明确的情节,但这是我们塑造角色和搭建世界观的初期工作。
GDC - Storytelling with Verbs:Integrating Gameplay and Narrative
用动词讲故事:整合游戏玩法和叙事
叙事的设计取决于玩家在游戏中做了哪些内容
游戏中的动词决定了玩家在这个世界中的行为方式,从而决定游戏行为,虽然游戏玩法并不会给出明确的情节,但这是我们塑造角色和搭建世界观的初期工作。
GMTK - How To Think Like A Game Designer
MDA:A Formal Approach to Game Design and Game Research
一种用于游戏设计和游戏研究的规范化方法
用于描述 How The Game Works,如游戏规则,游戏系统,按钮功能,背包容量等等,如玩家的最大子弹数等。
用于描述 How The Player Atcs,如子弹数量和武器充足且容易获取时,玩家更倾向于使用爽快的射击和虐杀,当武器和攻击受限时,玩家会更倾向于潜行、暗杀等技巧性的玩法。
用于描述 How The Player Feels,与图形和艺术风格等概念有别,此处更体现在玩家的直观感受上,如疯狂的射击能够带给玩家强大且不可阻挡的感觉。
作者在书中对其阐释:
GDI一般只使用一个画笔和一个画刷,即当前的图形设备描述表中每次只有一个画笔或画刷被激活;
所以在绘图前,要先选定一个画笔/画刷,需要注意的是,一旦选定后,直到被修改或程序结束,该画笔/画刷会一直被使用;
GDI关于画笔和画刷句柄的存取位置有限,且创建的画笔和画刷占用系统资源,完成绘图之后务必删除该画笔/画刷;
与窗口有关的消息简介:
WM_ACTIVATE
消息1 | bActive = LOWORD(wParam); // 激活标志 |
上述代码中bActive
可能的取值如下:
bMinimized
表示窗口是否已最小化;hwndPrevious
指将被激活或被取消激活的句柄,具体含义由bActive
的值决定:如果bActive
的值为WA_ACTIVE
或WA_CLICKACTIVE
,hwndPrevious
是被取消激活的窗口的句柄,该句柄可能为NULL
;
1 | case WM_ACTIVATE: |
在之前的代码中,我们对于WM_PAINT
消息的处理方式如下:
1 | PAINTSTRUCT ps; |
如下图所示,当一个窗口被移动、改变大小或被其他窗口遮盖时,WN_PAINT
消息便被发送了:
菜单的配置与前述各类资源一样,编写在.RC
资源脚本中,同时,和字符串资源相似,菜单各项的标识符也必须是整数ID,而不能是名称字符串;
一个简单的菜单配置如下:
1 | // 在头文件 RESOURCES.H 中 |
1 | // 在资源脚本 xxx.RC 中 |
上述代码可以生成如下图所示的菜单栏:
作者在书中写道“关键字DISCARDABLE是过时了但还是必须的”,但是实测在VisualStudio2019环境下此声明是不需要的;
与其他资源的定义相同,花括号可以被替换为BEGIN...END
对;
如果需要设置热键或配合Alt触发的快捷键,只需要在POPUP菜单或MENUITEM字符串中将&
放到想要标识的快捷键字符前面,如下:
1 | // 使 x 成为热键 |
Windows程序支持将资源数据编译到.EXE
文件中,优势如下:
支持编译到程序中的资源类型有:图标,光标,字符串,声音,位图,对话框,图元文件;
我们只需要创建扩展名为.RC
的文本文件,资源编译器会自动根据所配置的资源脚本装载所需的资源,并编译到以.RES
为扩展名的文件中,后续与.LIB
和.OBJ
文件编译为一个完整的应用程序文件;
Windows程序的关键是打开窗口,并对窗口进行文本、图像的显示工作,以及对来自窗口的交互消息做出响应,步骤如下:
每一个应用程序至少需要创建一个Windows类,用于描述窗口信息;
描述Windows类信息的数据结构有两个,WNDCLASS
和WNDCLASSEX
,最好选用较新的扩展版本WNDCLASSEX
;
在Unicode环境下,WNDCLASSEXW
被定义成了WNDCLASSEX
,相关定义如下:
1 | typedef struct tagWNDCLASSEXW { |
Windows允许不同的应用程序以轮询的方式“同时”执行,每一个应用程序都占用一段很短的时间片来运行,而后轮到下一个应用程序运行,如下图所示,CPU由几个不同的应用程序以循环的方式共享,而负责判断出下一个运行的程序、给每个程序分配运行时间的是调度程序的工作:
在大部分情况下,我们是不需要对Windows调度程序过度关注。
深入接触Windows,会发现其不仅是多任务的,还是多线程的,程序可以有许多较为简单的执行线程构成;这些线程被视为具有较重的权值的进程,从而如程序一样被调度;程序可以有一个主线程和几个工作线程构成,如下图:
一个视频游戏基本上是一个连续的循环,它完成逻辑动作并以每秒30帧或更高的刷新率在屏幕上绘制图像,与动画和电影的放映原理相似,简化的游戏循环结构如下图所示:
对上图每一部分流程进行说明:
在大多数情况下,游戏循环是一个含有大量状态的FSM(Finite State Machine,有限状态自动机),如下图所示: