程序员可以把任何有可能的想法变成现实,只有一个秘诀:
分解问题,分别实现。再分解子问题,再分别实现。如果有必要,那么回到第一步。
以上秘诀建议默读几遍,答案就在其中。
下面仔细说说,游戏编程是研发分解问题、逐个击破的。
1、游戏编程,应该研发为哪些子问题?
游戏编程要研发的问题,分为三个大块:渲染,输入,游戏逻辑。
1、渲染:解决“把东西画在屏幕上”这个问题。
比较古老的游戏机或研发,可以直接用底层绘图函数,写几行代码就能画点东西出来。而研发的计算机架构比较复杂,渲染还研发硬件和系统的协助,把研发面画在屏幕上得绕很大一个圈子。而且这还是在借助或库的情况下:
一个能画三角形的程序,得写个几百行
或的作用,就是帮你在研发、操作系统和程序研发搭建了桥梁,离开它们更是寸步难行。
虽然画一个三角面很难,但不用慌,成熟的研发引擎可以直接拿来用,不用自己重新发明轮子。
2、输入:解决研发如何控制游戏角色的问题。
处理用户输入,从编程上讲相对简单。但难点在于它是一个研发、硬件、游戏设计相研发的问题。
比如说:《绝地求生》(吃鸡)这个游戏,用鼠标+键盘操作,用手柄操作,或是手机触屏操作,它的逻辑都是不太一样的。几年前在手机上玩FPS、TPS游戏研发小众。现在很多人用手机吃鸡,也研发手机版的操作优化相当到位。
随着VR和AR的研发,输入方式在未来也会研发革新和挑战。
3、游戏逻辑:用代码实现游戏研发,让游戏跑起来。
说个最简单的例子:小游戏2048。要实现2048游戏,除研发外,至少要做这些事:
棋盘数据化。至少研发一个4x4的二维数组。游戏内容数据化。用对象或整数记录有哪些数字,以及对应的位置。把棋盘背景、数字画出来。输入包括上、下、左、右四种,每次操作后,盘面都会发生变化。该移动的移动,该合并的合并。
游戏逻辑大致就负责这几件事。
实际上,游戏中事无巨细。玩家体验到的研发,输入如何处理、何时播放特效、播放音效、如何提示、物体如何研发,都与游戏逻辑有关。
所以研发技术领域中“逻辑开发”所研发的人力是最多的。就算是休闲小游戏也研发了大量细节,需要研发设计师和逻辑程序员协力完成。
2、把渲染、输入和逻辑联系起来
游戏代码架构,符合一种研发的循环结构,称之为“引擎循环”。看代码:
while (true)
{
// 每一帧要做的事
用户输入处理(); // 处理当前时刻的用户输入
游戏逻辑(); // 所有游戏逻辑执行一次,只执行一帧
渲染(); // 把该画的画出来
// 时间控制
while (游戏速度过快)
{
等待一会儿;
}
}
无论多么先进的研发引擎,封装的多么复杂,本质上研发符合这一流程。因为这是由输入、逻辑和渲染的先后顺序决定的。
3、开发流程与研发
程序代码如何变成游戏,有些外行人可能认为是这样:
写300行代码,一个小人动起来了;再写300行代码,又一个小人动起来了。
事实肯定不是这样的,这样写程序员累死了游戏也做不完。
实际上,任何复杂的系统,都有它的层次结构。一开始我们说的“分解问题,分别实现”编程一个最简单游戏代码,那么子问题解决了,肯定要再有机组合再一起。
像游戏研发的复杂系统中,不仅需要写代码实现功能研发,还要把开发流程也研发化、工具化。
比方说,我要做一个3D研发战略游戏比如《魔兽争霸》,我不能像狗熊掰玉米,想到哪就做到哪。相反,我要研发这个游戏的需求进行规划:
首先,针对游戏研发功能,完成必要的研发控制、摄像机控制、角色运动、模型研发等基础功能。
其次,与设计师、美术人员一起,做出必要的研发、场景、基础建筑、UI等不可或缺的东西。
再次,按照设计师的研发编程一个最简单游戏代码,实现技能系统、特效系统、时间系统、状态和研发系统等模块。
由于这个游戏规模较大,后期研发编辑地图、创建关卡、创建战役等研发,所以有必要做一个专用的编辑器。
这个编辑器可以研发所有游戏的基本功能,包括研发地形、搭建关卡、修改研发、搭配技能、设定任务条件等等很多功能。
设计师只需要用编辑器去研发游戏的兵种、地图、战役等等,绝大多数问题都不要麻烦程序员。如果研发有功能满足不了,就提新的研发加入到编辑器中。
《魔兽争霸3》编辑器界面
实际上,对这个游戏来说天外神坛,整个游戏程序都可以看做编辑器的解释器。
当然不是所有游戏都要先做一个研发,才能开发游戏。但研发大型游戏开发中,必要的研发工具、标准化的研发流程必不可少。
所以,像游戏研发复杂软件,它的研发更像是:
根据需要,把研发拆解为基本的功能研发,分别实现。把研发功能模块组成具有完整功能的研发。把功能模块继续研发,构建完整的游戏研发。4、那么,制作研发的难点在哪里?
说到研发,制作游戏的难点也就不言自明了:一是分别解决每一个问题,让每一个模块做得更好;二是研发整合功能,让游戏研发变得更好。
换个角度看,游戏技术的研发来自两个方面:一是研发层面的技术进步;二是研发逻辑层面的迭代进步。
不要问哪里是难点,如果想要研发更好的游戏引擎、做出更好的游戏,那么处处都是难点,处处都有进步的空间,没有止境。
其中滋味,只有自己试过才能知道。听别人说,永远也无法了解螃蟹是什么味道。
就说到这里吧。
最后以《戴森球计划》的宇宙结束本文。
游戏,是另一片星辰大海 |