阅读代码的一些心得(3)


【游戏篇】

0. 我的游戏引擎核阅读心得:找到Update,就找到了一切!

1. 找到游戏主循环:游戏主循环是游戏的核心所在,所以找到主循环至关重要,有几个办法,如果代码是可运行的(一些时候,代码连编都编不过),那比较简单的就是加断点(其实很多时候,都可以用加断点的方式来辅助阅读),这样callstack一看就找到了。如果不能运行,一个办法是从Main函数开始找,还有一个办法,是先找到一个模块,比如input的update函数,然后再顺着往上找。还有一个讨巧的办法,就是搜关键字,比如MainLoop。

2. 熟悉游戏的模块:游戏引擎总有一些常见的模块,比如input,animation,AI,network,sound,render,physics等等,这些模块就是游戏引擎的核心,可以先在引擎里找到这些模块的Tick或者Update函数,由update开始逐渐深入到各个模块的具体运作。看游戏引擎,一般只会挑自己感兴趣的看,因为引擎的东西实在太多,太杂,不可能都去了解。所以一定要有所取舍。

3. 要不求甚解:游戏引擎里面包含了各种技术,每个部分都有很多精彩的东西,但在通篇阅读的时候,有些可以跳过,也就是,只要知道他干吗的就可以了。最好的例子就是math,一些引擎的math实现相当厉害,但对我们来说,只要知道,vector,matrix等等怎么用就可以了,其内部实现,优化方法等完全不用去了解(除非你想学习)。我想到一些游戏中可以不用去了解的部分:基本数据结构(array,list等),math,thread部分,time,memory(但如果要优化内存,或者有bug,就需要看),一些类型的封装(smartpointer等),ScriptSystem(游戏中有时会自己实现一套虚拟机,可以无视)等等

4. 数据的重要性:游戏中的数据十分重要,比如你看AI部分代码,很有可能很多定义都在数据中,如果单看代码会十分难以理解,比较好的就是结合引擎提供的editor来看,先用editor改一下数据,然后再在代码里看相应的代码。还有,现在的游戏引擎很多都用了Script,比如lua,或者游戏自己的Script,比如Unreal,这时候,就要在script和引擎两头转,如果引擎没有提供很好的工具,确实相当麻烦,我到现在还没找到一个很好的办法来解决这样的问题,

5. :阅读游戏引擎需要一点经验,经常会边猜边读,猜的过程,就是一个使用以往经验的过程。总的来说,游戏中用的技术有一定的通用性,虽然名字或叫法可能不同,但基本思想还是一样的,又要举一个我比较熟悉的AI的例子,比如,FSM,有限状态机,看到代码里有类似的名字,那我就能大致了猜到这段代码的实现方法了。

好啦,写了这么多,基本把我想到的,学到的都做了一个梳理,我一方面上班会看一些代码,现在在业余时间也在研究doom的源码(以后可以写个Doom阅读笔记系列,再次崇拜一下伟大的Carmack),还在维护一个游戏引擎(TsiU),可以说,对游戏引擎的积累也慢慢加深,这里share一些东西,也算一个总结,我也是个Game界的newbie,欢迎大家讨论,批评指正。

相关:

—> 阅读代码的一些心得(1)(工具篇)
—> 阅读代码的一些心得(2)(通用篇)

————————————————————————
作者:Finney
Blog:AI分享站(http://www.aisharing.com/)
Email:finneytang@gmail.com
本文欢迎转载和引用,请保留本说明并注明出处
————————————————————————



(已被阅读924次)

1 评论

  1. 赞,某大神说过,“阅读代码首先抓住其数据结构”。就我自己的经验来说,数据结构可以帮助我掌握整个模块的脉络,知道这个模块有哪些数据。从数据结构也大概能猜出一些这个模块是干什么的,可能有哪些接口,这样在看实现的时候,会流畅很多。

发表评论

电子邮件地址不会被公开。

Copyright © 2011-2017 AI分享站    登录