你小时候玩过这样的玩具吗:一块纸板,一面是一只小鸟,另一面是一个笼子。纸板的底部粘着一根细棍。如果你用手来回转动棍子游戏开发,使纸板的两面交替出现,你就会看到被困在笼子里的小鸟。
这种现象叫做视觉暂留,又称余辉效应。人眼的特性使光信号进入后会停留很短的时间,大约为0.1到0.4秒。电影和动画就是利用这种现象,快速连续播放静态图像,形成看似连续的运动画面。游戏也不例外。
我们先来看一个用Python著名游戏库pygame(需要安装)编写的“空游戏”代码:
这份代码虽然只是显示了一个背景图片,没有任何游戏功能,但这已经是一个基本的游戏代码框架了。
注意代码中的while True循环,注释为“主游戏循环”,这是游戏的主要部分,每次循环相当于一张静态图片,程序不断运行,只需要修改这张图片就可以有动态效果。
和动画不同的是,在游戏中,你不仅需要把图片一张一张的播放出来,还需要处理玩家的操作和游戏中内容的交互,因此在这个while循环中,还需要接收玩家的输入,处理游戏中的各种逻辑判断,移动,碰撞等等。
在上述代码的主循环中,对退出事件做出的响应是:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
然后将图像绘制到窗口中:
screen.blit(background, (0,0))
最后,更新整个窗口:
pygame.display.update()
如果你看过《黏土动画》,你可以把整个游戏流程想象成拍摄黏土动画的过程:
计算机在很短的时间内处理完所有事情,因此玩家会感觉很连贯。
虽然这是一个很简单的游戏逻辑,但核心原理对于大多数游戏来说都是一样的,即使是炫酷的3D游戏或者大型网游,也是通过一个主游戏循环来运作的游戏开发,在循环中更新各种游戏逻辑和显示效果。
有些大型3D游戏需要在一次循环中做很多事情,包括复杂的物理计算、光效计算、大量电脑角色智能处理、网络信息通信等。在低配置电脑上,这些计算耗费的时间更多,游戏刷新画面的速度会更慢。这也是为什么我们经常听到“某款游戏帧率低”,这时候就会感觉游戏不流畅。
以上就是电子游戏核心原理的简单介绍,如果是对游戏开发感兴趣的新手,可以看一下我之前写的pygame系列教程:
虽然不像现在流行的游戏引擎那么容易操作,但是通过代码实现游戏可以让你更深的理解游戏的底层逻辑。