你的游戏开发第0课

电子游戏是许多人喜爱甚至沉迷的事情。尤其对于程序员来说,开发游戏是不少人最初学习编程的动力。在之前,我发过一些游戏开发的教程和案例:

游戏开发也是学习编程的一个很好方式,代码上的各种增加和改动会立刻有直观的反馈,让你的学习过程显得不那么枯燥。

不过游戏开发和一般编程初学时接触的程序开发模式有一定的区别,刚上手可能很不适应。我发现网上的游戏开发教程大多是从某种语言或引擎的开发细节入手,而没有一个提纲挈领式的整体介绍。作为一个有不少年游戏开发经验的开发者,我今天就分享下这方面的经验。

电子游戏的原理

电子游戏的原理其实和电影的原理是一样的,都是利用人的“视觉暂留”和“似动现象”,使原本离散的静止图像,看起来是连续的动态效果。

这种翻页动画就是最好的例子。只不过电影通过胶片和放映机把它自动化了,而电子游戏更进一步:不但可以自动连续播放,而且过程中你可以去控制画面中的内容。这有赖于计算机程序的实现,但本质是相通的。

我们平常玩的游戏,其实都是一张张图像连续播放而成。播放的快慢,就是我们经常听到的“帧率”(FPS。当你的电脑配置跟不上游戏的要求,运行帧数很低时,会被戏称为“幻灯片”,也正是由于这个原因。

基于此,游戏程序的代码在结构上就和一般的程序就有了明显的区别,就是:

主循环

对于游戏来说,需要有一个不停执行的循环,不停产生图像,并把它显示到屏幕上。在我们 pygame 的教程中,你可以很明显地看到这个:

while True:    ...

在主循环里进行的各种读写、计算、处理、渲染……构成了游戏的每一帧。有一类游戏开发岗位常见的面试题,我面试 Ubisoft 的时候被问到过,后来也用来问过很多应聘者:

以一个 FPS 游戏为例,列举游戏在一帧内需要处理哪些事情?

给出一份我的参考答案:

  1. 事件响应,主要是用户的输入。如键盘按键、鼠标移动、鼠标点击、语音等。

  2. 更新游戏内元素的运动状态,这一环节大多由物理引擎处理。如移动、下落、惯性等。

  3. 碰撞检测,以及碰撞后的事件响应。如子弹击中角色、拾取物品等。

  4. 电脑角色(NPC)的行为,即电脑 AI

  5. 网络请求、数据更新、同步等,判定游戏得分及胜负。

  6. 计算或播放动画效果。如人物动作、爆炸特效、树木水面等环境效果。

  7. 渲染场景画面,包括光照效果等,即生成最终显示的画面。

这一些列动作需要用到大量 CPUGPU(显卡)的计算。计算的快慢决定了游戏一帧的耗时。通常最耗时的操作在于实时的动画计算和光照渲染。这就是为什么当你玩游戏卡顿时,可以通过调低画面效果、关闭软阴影/抗锯齿、降低模型质量等方法改善,或者,买一块更强大的显卡……

游戏程序的主体结构抽象来说就是这样一个流程:

这里提一个小细节,就是如果我们计算运动是按照每一帧更新固定的长度来计算,就会出现运算速度快的电脑上帧数很高,运动就很快,反之差的电脑上就很慢(我们 pygame 教程里的打飞机游戏就是如此)。通常的解决方法,一种是固定帧数,大家都是30帧运行;还有一种就是对运动速度进行修正,最简单的办法就是以固定值乘以上一帧实际消耗的时间

游戏中的设计模式

谈了游戏程序的整体结构,我再来说几个游戏开发中常用设计理念和模式。

首先是面向对象。因为游戏大多是对现实场景的模拟和抽象,含有众多角色和道具,所以它比其他程序更适合使用面向对象的设计。不少企业在面试时也会用游戏角色的设计来考察面向对象的概念。比如:一个兵种就是一个类,它有父类(角色),有子类(细分兵种),有属性(血量、攻击),有方法(攻击、死亡)。

MVC模式(Model-View-Controller),即把模型、视图、控制器分离开的设计。在游戏开发中,通过 MVC 模式,将游戏玩家、场景及角色的数据(Model)、游戏画面和菜单的显示(View)、游戏的输入控制和逻辑处理(Controller)分离开,会让程序的架构更合理,容易维护和扩展。

状态机。游戏中的角色,经常会有多种状态的切换,比如第一人称射击游戏中的站立、跑动、开镜、下蹲、卧倒等。如果简单的通过一堆 if-else 来管理各种状态的切换,会让代码十分繁琐很难以维护。这时候可以了解下状态机模式。

游戏开发之路

在实际的开发中,几乎没有团队是从零开始写一个游戏,或多或少都会使用或自研游戏引擎。所谓游戏引擎,就是把我们前面说到的一些游戏中的通用工作,比如输入处理、物理引擎、动画、场景渲染、网络交互等部分封装起来,让开发者可以专注于游戏本身玩法的开发。像之前提过的 Cocos、Unity,包括 pygame 都属于游戏引擎的范畴,只不过各自的形式和侧重点有所不同。

在引擎之上,游戏开发团队还会为游戏制作专门的编辑器,以方便游戏策划人员编辑关卡和数值。如果你捣鼓过暴雪的魔兽争霸、星际争霸之类的编辑器,对此一定深有感触。

一个最简单的游戏团队,一般也有三类人:策划、程序、美术。这是游戏开发不可或缺的三个部分。策划负责游戏的玩法、数值、关卡、剧情等设计,程序负责实现功能以及开发相关工具,美术负责各种视觉素材。再多一点可能还会有专门的动画和音效人员;也有个人独立开发者所有工作一肩挑。而如今的大制作游戏,团队则要庞大许多,各种细化分工就远不止这些了。

如果你有志于从事游戏行业,或者想开发出属于自己的游戏,我给出一点建议:

  1. 了解游戏开发的基础,一般游戏引擎都有官方教程,跟着做

  2. 打牢编程基础,包括数据结构、算法、设计模式等

  3. 多了解各方面的知识,多点兴趣爱好,不仅仅是玩游戏。这对于写代码或许没有直接帮助,但如果你想做自己的游戏,这些将会派上用场

  4. 多写。不要纠结太多,就从最弱最简单的小游戏开始写,一个接一个的写。坚持下去,并不会太久,量变就会产生质变。

以上是我关于游戏开发的经验与分享。你若有其他想了解的,欢迎留言讨论。

(0)

相关推荐

  • 【商业教程】unity5 2D游戏开发教程2套合集

    --  微资讯 · 微课程  -- 利用零碎时间,走上超神之路! 课程介绍 4小时提升你的游戏设计 课程描述 在这个课程中我们会使用简单的2D动作平台,你会学到多种技巧,比如如何添加 屏幕抖动,如何让 ...

  • 【商业教程】使用unity3D 5 继续拧游戏开发全入门

    --  微资讯 · 微课程  -- 利用零碎时间,走上超神之路! 课程介绍 1课程介绍 2编程和UI介绍 3创建一个2D游戏 4创建一个恐怖的第一人称的设计游戏 5为3D设计游戏创建关卡 6为3D设计 ...

  • 【商业教程】unity3D 从游戏玩家到游戏开发者第一季到第三季全

    --  微资讯 · 微课程  -- 利用零碎时间,走上超神之路! 教程介绍 欢迎来到从游戏玩家到游戏开发者教程,我将会帮助你实现开发游戏的梦想,让你超越仅仅是个玩家的身份.我们向你展示如何使用unit ...

  • 见证电竞产业华丽转身的英特尔:游戏性能很重要,开发者更重要

    英特尔如何优化游戏性能? 作者丨周雅 几乎每年的ChinaJoy都少不了英特尔的大招,今年也一样,英特尔联合京东现场包馆张罗了一场VR电子竞技国际大赛(简称VRES)媒体杯电竞体验赛.话说VRES已经 ...

  • 游戏开发设计基础教程

    内容简介: <游戏开发设计基础教程>面向游戏设计开发的初学者,按照由浅入深.理论结合实例的原则,介绍网络游戏开发的编程技术.设计技巧及开发过程.全书共分为9章,内容包括网络游戏概述.二维游 ...

  • V社宣布停止开发Artifact2.0 两代游戏全部免费

    今天清晨,V社在STEAM页面发布了一条公告,宣布将停止DOTA2卡牌游戏Artifact2.0的开发,并且将两个版本的Artifact游戏全部以免费的形式向所有人开放.这一则公告引得无数Dota2玩 ...

  • 商业游戏开发计划书

    商业游戏开发计划书

  • 做游戏开发需要学什么,小A同学分享!

    近几年来游戏行业发生了翻天覆地的变化,以至于很多人现在都想加入这个行业,这个行业给大家的第一感觉就是高工资,这无形之中就给游戏开发者蒙上一层很厉害的面纱.有的人为了换个环境,有的人是真心喜欢游戏这个行 ...

  • Macd顶级课程系列教程 第0课 课程目录

    第0课 课程目录 说到macd,首先我们得了解什么是macd,为什么那么多指标我们要用macd呢?因为他是"指标之王",擒贼先擒王,学好了它胜过一切的其他指标. 很多人对macd的 ...

  • 现代海战单机版下载|现代海战单机游戏下载v1.0.44 安卓版

    现代海战不联网版手游将为玩家们呈现一个刺激无比的海上战争时代,游戏以现代化的科技力量战斗为主,各种知名战舰都会在游戏中与大家见面,而你现在只要赚够充足的金钱就能直接制作,还能与真人玩家在线对战哦,喜欢 ...

  • 游戏开发行业如何合理税筹

    互联网的飞速发展,游戏这个行业也越来越大,消费群体的增加,各层次的人群喜爱的游戏也不一样,多样化成了游戏开发者的目的.像国内巨头公司,腾讯.网易等每年的收益大家都是看的到的,一款新的游戏开发上市之后, ...

  • 游戏开发与设计中的“3C”是指什么?

    随着国内游戏行业的不断发展,越来越多国外的专业词汇被引入进来."3C"作为一个比较重要的技术名词至今却仍然被不少游戏从业者所陌生.那么到底什么是3C?他在游戏设计以及游戏开发中有什 ...