想要自己做一款游戏,需要学习哪些知识?

语言: CN / TW / HK
自制网游星际逮虾户4人对战视频

本来想花几个月好好做一个能看的二刺螈软萌风搓狐狸的游戏再来逼乎吹一吹,奈何最近忙着炼丹没时间捣鼓,上面这个是一个多人在线网游,虽然只是个用于测试引擎的美术两小时搞完的demo版本,但麻雀虽小五脏俱全,目前已经在github完整开源,过段时间不咕的话会移植到Android端。

这款游戏的实现相当相当底层

1-首先语言选定为c语言,完成一个内存池,实现内存的分配释放,这里主要问题是内存的分配和释放效率问题和减少内存碎片,实现基础的数学函数例如sin cos sqrt log等,这里涉及一些数学知识 不过总体并不算太复杂。

DBinary:PainterEngine 内存池实现与细节

2-现在代码完全独立于平台,不依赖任何三分库和标准库,在此基础上完成颜色,向量和矩阵的一系列封装,然后完成基础数据结构string,list,vector,map,queue这里可以参考标准库的实现例如map可以采用红黑树,总体而言不算太复杂,大部分是体力活。

3-完成一些常用的算法,例如信号处理相关的dft fft dwt 各类window及filter,密码相关的AES Curve25519 sha256 ,四叉树,kd树,声音混音器...不是所有都用的上,有些可以直接上手开干,有些理论较为深奥例如密码学那块的,可以上github上找ms,Google,apple一些大厂的开源代码改改移植过来

4-完成编写渲染器前的一些基本工作,例如定义颜色格式,封装render surface,texture,vertex等数据结构,现在可以开始实现软渲染器了,可以先从一些简单的几何图形光栅化开始,线,矩形,圆,扇形,三角形,如果不做反走样的光栅化都挺简单的,但如果是考虑渲染效率的反走样光栅化,就完全不是一个难度了,同时完成一些基础常用图形格式的解析例如bmp位图,自己创建了一种带透明通道的图片格式traw,由png转换得到。

5-完成透视投影变换,纹理映射引出VS及PS接口,完成一个3d软渲染器,需要一些图形学的基础,但这部分听上去高大上,完成起来并没用想象中那么复杂,因为不是主要用途,所以在实现一些简易动画上基本凑活够用了。

6-开始设计一门编译型脚本语言,构思其基本语法,实现词法和语法分析,然后开发编译器,虚拟机(带调试器),需要一些编译原理的基础,但真正用到的知识点并不多,主要是ast树的构建,可以采用递归下降分析法,可以设计为定长指令,这样虚拟机部分做起来难度小得多,一些核心算法完成后,主要还是堆语法糖之类的苦力活。

DBinary:从虚拟机架构到编译器实现

7-现在可以开始设计游戏引擎了,一个对象管理器方面的内容,一个游戏对象基本可以用initialize update render三部分组成,另外最大的难点应该是一个较为通用的碰撞检测实现,另外就是对象的创建,销毁,回收 这部分与脚本引擎对接,引出接口便于游戏拓展。

8-在上面的基础上,完成资源管理器,包括纹理,音频,脚本资源,文本资源...进一步设计动画管理器,粒子系统,音频管理器,编写tools以编辑资源

9-设计网络同步协议(帧同步),主要是处理延迟平滑,断线重连等问题

10-依据以上游戏引擎,绘制游戏的图片资源,设计游戏Object的逻辑处理代码,加载资源,并编写单机DEMO

DBinary:PainterEngine打造独立游戏

11-编写游戏服务器,包括游戏大厅客户端,游戏大厅服务端,游戏实例客户端,游戏实例服务端,建立数据库管理系统,使用Curve25519+AES建立数据的安全连接.

12-编写平台兼容层代码,渲染renderbuffer并播放混音合成的PCM音频流,最后测试游戏,发布

开源地址:

matrixcascade/PainterEngine-Game

游戏的网站服务端:

http:// pan.baidu.com/s/1h5aBmC fizWNj7FTSv4cJ7A

提取码:ue5w

来源:知乎 www.zhihu.com

作者:DBinary

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。点击下载

此问题还有81 个回答,查看全部。

延伸阅读:

怎样成为一个游戏策划,需要哪些知识和技能?

学习3d游戏开发需要什么知识和技能?