“我曾独臂走过天下,大言不惭地说任意编程语言,我三天就能上手。随便什么库,什么软件我拿起来就可以熟练使用。市面上啥游戏引擎我都摸过,甚至想闭门造车,直到后来我遭到了现实的毒打。”
有人说,独立的游戏人必须会编程。为什么呢?因为只有你会编程、掌握了一款游戏引擎,你才会真正明白:游戏,作为一款软件来说它的本质是怎样的,它是如何运作的。尤其是当下,游戏体验的质量在很大程度上取决于客户端与服务器之间的连接。了解程序,就是了解一款游戏在电脑上工作的原理。并且,当你掌握了一款游戏引擎后,即使你其他什么都不懂你也已经能够做出简单的游戏demo了,比如实现一个小人拿着一把大宝剑,跑来跑去,他可以打怪,怪可以攻击小人,两者互相掉血。
(图片源自网络)
在编程领域里,真正的独行侠是很罕见的——就算他们真的存在,他们的非凡成就也不是凭空而来的。这些改变世界的成就几乎都是集体智慧努力得来的结晶。——《极客与团队》
一言以蔽之,游戏开发是一项集体协作的项目。
上周,动游大本营的技术组小分队带来了他们的小课堂:《游戏开发过程中的优先代码和技术以及代码规范的分享》
课堂一开始,高级U3D开发工程师查启杰给我们讲解了lua代码的用法,还现场演示了把函数缓存起来,一千万次调用之后快了0.17秒,效率提升32%。在避免重复创建对象导致的性能损耗后,10万次调用快了0.74秒,效率提升了26.7%,关键是GC这一块从17M降到了1.9kb。
在讲解透视相机下的模型与FGUI适配计算方法时,引用了高中时的数学知识点,以屏幕为坐标,x,y以像素为单位,z以米为单位,表示与摄像机之间的距离。这一刻,查老师成功地把我的思绪拉回到了高中时期那个阳光明媚的午后,那堂让我爱恨交加的数学课上。
屏幕坐标与世界坐标的转换
屏幕坐标,x,y以像素为单位,z以米为单位,表示与摄像机之间的距离
FGUI高度与实际高度有一个缩放比例:FairyGUI.UIContentScaler.scaleFactor
tan(camera.fov*0.5) = 半屏高度(m) / 摄像机与模型之间的距离 (m)
干货分享不能停,查老师课堂结束后,紧接着服务器主程龚剑波开启了他的小课堂。龚老师介绍了如何让服务器跑起来,详细讲解了传统游戏入库最简单的架构。
“一个玩家原本有500个元宝,买装备用掉了200个元宝,结果显示还有400个元宝,这明显是错误的。该如何避免这种错误的发生?”
来龚老师的课堂,这里会有你要的答案。
精彩不断,分享不停。后端主程张超给我们带来了他的大课《Akka介绍及在游戏服务器中的应用》。
在游戏开发里,哪些模块可以用到akka?如何解决服务器之间的交互?一个游戏区服里设计了可以容纳300个人,突然有一天进来了500个玩家怎么办?带着这些疑问,张老师首先给我们详细介绍了什么是actor模型,然后进一步引入akka:akka是actor模型的实现,它继承了actor模型的特点。
介绍完akka后,张老师又分析了几个竞品举例说明了一下,加深大家对akka的理解。
Erlang:原生支持actor模型,可不停服动态更新
Golang:基于CSP(Communicating Sequential Processes)模型。CSP是依赖于一个通道channel完成两个通信实体之间协调的并发模型。它基于不共享内存的消息传递。
Node.js:一个事件驱动I/O服务端JavaScript框架。
Vert.X:JVM上的Reative开发套件。也是基于事件驱动的编程模型框架。
Skynet:C和Lua语言实现的一个Reative开发套件,底层使用C,上层逻辑使用Lua,每个Lua服务是一个Lua虚拟机,这就保证了服务之间的环境隔离,Lua服务使用协程处理消息,当需要向其他服务通讯时,协程可以挂起等其他服务返回再继续,这让我们一方面能像写同步代码一样“顺序执行”,另一方面当协程挂起时,该服务可以处理其他消息,这就保证了消息的高并发。
一堂大课下来,让我认识到了,游戏开发技术涉及面非常广泛,而且涉及到的每一个技术点都有相当的深度可挖。
而一款游戏就好比一个人,策划是灵魂,程序是骨骼,美工是皮囊。外表不好看就是丑陋,灵魂丢失就是植物人,骨骼不健全就是残疾。一款好游戏的问世,离不开团队背后每一个人的努力和付出。就像人生也不是一个人的游戏,无论是现实中还是游戏中,很多事是需要大家一起努力才会成功。
“Stay hungry,stay foolish”,这是今日分享会的主题,这也是我们动游大本营企业文化建设中的一个很重要的部分。我们注重员工的成长和进步,希望大家都能时刻保持饥渴,拥有对知识的欲望,保持愚钝,及时清空大脑积极接受新鲜事物。是的,不管在任何时候都要“Stay hungry,stay foolish”。