介绍

游戏程序员的学习之路 《游戏程序员的学习之路》由已在游戏业界工作超过二十年的Milo Yip完成,介绍了游戏程序员的学习路线,并推荐了相应的书籍。

楚天阔目前的工作情况

miloyip/game-programmer: 游戏程序员的学习之路 非常系统完整地介绍了游戏程序员应当阅读的书籍。

由于其中引用了大量中英文书籍,随着时间推移,有很多书会有新版本、中文版等等,因此需要对书籍信息进行更新维护。

更新的信息一定要保证正确无误,必须通过构建来验证正确性。

目的

《网络多人游戏架构与编程》《游戏人工智能》 都出版了中文版,因此需要更新中文版学习之路。

方法

macOS Mojave

最先尝试在 macOS 10.14 上构建,结果在构建时,dot 一直报异常:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
dot "game-programmer.dot" -Tjpg -o "game-programmer.jpg"
2018-10-20 21:30:42.034 dot[28987:64453] +[__NSCFConstantString length]: unrecognized selector sent to class 0x7fff9cf6d8c0
2018-10-20 21:30:42.041 dot[28987:64453] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[__NSCFConstantString length]: unrecognized selector sent to class 0x7fff9cf6d8c0'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff4533a43d __exceptionPreprocess + 256
	1   libobjc.A.dylib                     0x00007fff71247720 objc_exception_throw + 48
	2   CoreFoundation                      0x00007fff453b71a5 __CFExceptionProem + 0
	3   CoreFoundation                      0x00007fff452d9ad0 ___forwarding___ + 1486
	4   CoreFoundation                      0x00007fff452d9478 _CF_forwarding_prep_0 + 120
	5   CoreFoundation                      0x00007fff4526af54 CFStringCompareWithOptionsAndLocale + 72
	6   ImageIO                             0x00007fff47dd8367 _ZN17IIO_ReaderHandler15readerForUTTypeEPK10__CFString + 53
	7   ImageIO                             0x00007fff47db0527 _ZN14IIOImageSource14extractOptionsEP13IIODictionary + 183
	8   ImageIO                             0x00007fff47ddd2e6 _ZN14IIOImageSourceC2EP14CGDataProviderP13IIODictionary + 72
	9   ImageIO                             0x00007fff47ddd1bb CGImageSourceCreateWithDataProvider + 172
	10  libgvplugin_quartz.6.dylib          0x00000001058c2b8f quartz_loadimage_quartz + 224
	11  libgvc.6.dylib                      0x000000010523d39f gvloadimage + 265
	12  libgvc.6.dylib                      0x000000010523c40b gvrender_usershape + 998
	13  libgvc.6.dylib                      0x0000000105252dc4 emit_html_tbl + 1298
	14  libgvc.6.dylib                      0x00000001052527fc emit_html_label + 436
	15  libgvc.6.dylib                      0x000000010525ff6d emit_label + 57
	16  libgvc.6.dylib                      0x0000000105269b20 poly_gencode + 2174
	17  libgvc.6.dylib                      0x0000000105275d31 emit_node + 1023
	18  libgvc.6.dylib                      0x0000000105274a31 emit_graph + 4714
	19  libgvc.6.dylib                      0x0000000105279caa gvRenderJobs + 4804
	20  dot                                 0x000000010522ed62 main + 697
	21  libdyld.dylib                       0x00007fff72315085 start + 1
	22  ???                                 0x0000000000000005 0x0 + 5
)
libc++abi.dylib: terminating with uncaught exception of type NSException
make: *** [game-programmer.jpg] Abort trap: 6
make: *** Deleting file `game-programmer.jpg'

根据搜索到的答案 macos - Graphviz crashes on Mac during render using Quartz - Stack Overflow 中描述,这是因为安装 graphviz 时未安装依赖库 pango,即使按照答案中的解决方案 brew reinstall graphviz --with-pango 由 brew 处理所有事项,最后依然会报异常。

经过检查 graphviz 发现虽然配置文件中存在 pango,但是库目录中并无 pango 辅助库文件。此问题应当是 brew 打包的软件不正确导致。

截止 2018/10/21 时此问题仍未修复。

Ubuntu 18.04

使用虚拟机安装 Ubuntu,然后执行以下命令即可:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
sudo apt install graphviz
wget https://github.com/coherentgraphics/cpdf-binaries/raw/master/Linux-Intel-64bit/cpdf
chmod +x cpdf
sudo mv cpdf /usr/local/bin

sudo apt install git
git clone https://github.com/miloyip/game-programmer/

cd game-programmer
make clean
make

全程没有任何报错,直接生成最终文件。但是构建生成的 pdf 有 50MB+ 大小,远比仓库中的 8M+ 大。

结果

因为生成的 pdf 过大,因此并没有提交到仓库中。

中文版图书更新 by networm · Pull Request #42 · miloyip/game-programmer