游戏夜读 | 怎么让游戏跑起来?

null

让游戏跑起来,最直观的就是,画面不卡顿,不卡帧数,运行流畅。

但细究起来,游戏元素怎么动起来的?规则是怎么实现的?游戏机制怎么运作的?画皮之下,游戏的骨骼是怎么样的?脉络是什么分布?

一万个为什么,一万个怎么样……最后,呈现出来的,是电子游戏程序的运行框架。大部分的基本框架,本质上是一个循环,是一个套娃的策略。一个游戏研发团队,除去项目经理之外,常设的策划、美术、音效、程序、测试等五大职能,所付出的心血,都会被注入这个“运行框架”。

电子游戏的本质是计算机程序。

一个完整的游戏运行框架

可以理解为就是一个循环绘制图像的程序。虽然是最基本的运行框架,也有一个基础结构。整体上是一个“死循环”,在循环里面是需要重复做的事情,分为三大类:更新游戏内容、准备画面、屏幕展示效果。

// 一个完整的游戏运行框架(示意)

gameLoop(){

while(True){

gameUpdate(){ // 更新游戏逻辑

pass

}

gameRender(){ // 离屏绘制

pass

}

gamePaint(){ // 前屏绘制

pass

}

}

}

上面示意的这个“框架”取材并改编自《游戏程序设计教程》,该教材由对Greenfoot颇有钻研的何青编著,近年又有了新书2.0,对新手更加友好了。说回这个简洁的“框架”,而且明显可以再简洁,比如只放一个“图像绘制”的函数。可是,为什么不呢?

双缓冲机制

这是一种绘制手法,叫缓冲机制,常见是双缓冲机制。跟计算机图形学、影像成形等领域有关。之所以要采用缓冲机制,是因为只放一个图像绘制的函数,那势必就是直接在屏幕上绘制。但游戏元素多了以后,绘画的速度跟不上肉眼的识别。

一个很简单的例子:翻书画。翻的慢了,画面就卡顿了。因为种种原因,直接在屏幕上作画的步骤,跟在画板上作画差不多,擦除、一笔一笔画上,速度慢了,效果就不好了。缓冲机制的做法就是“蒸好馒头再卖”,先在蒸馒头的笼屉里蒸好馒头,然后再转移到卖馒头的笼屉里。对应的,就是离屏、前屏。离屏一般就是在内存里。

程序设计思路

软件程序有设计方法,电子游戏也不例外。有了运行框架的先入为主,可能会让大部分人都陷入“从上而下”的设计思路。其实,并非如此。更常见的是,原型设计法。先让游戏的一小部分跑起来,然后再去开发游戏的其他部分。

但话说回来,不管是哪种设计法,都离不开运行框架。

打开APP阅读更多精彩内容