不知不觉又到12月了。近期写代码少了很多,多了时间去看书学习和打游戏,这个过程想了很多也思考了很多,今天就说说近来我的所思和所想吧。
1、从war3看寻路算法
这个是我昨天想到的。我们打dota的时候,在追杀一个红血的英雄的时候,应该一下一下地点追杀的路径到直线距离的时候再A。以前我总是A对方红血的英雄以致常常以追杀失败而告终,现在学乖了,知道如何去杀,命中率自然大大提高了。这里不是想说明打游戏的技巧,而是由此引出游戏寻路算法的一些思考。寻路算法主要分为3种,Dijkstra算法、BSP算法和A*算法。Dijkstra算法侧重于精确地找到最短的路径,但速度较慢;BSP算法侧重于快速地找到一条路径,但往往有障碍的情况下效果不佳;A*算法则是两者结合的产物,是游戏中最为常用的寻路算法。然而从war3来看,其用的应该是BSP算法而不是A*算法,因为如果用的是A*算法上述情况只需A对方英雄追杀而不用人工的点路径了。魔兽里面之所以不用A*主要原因可能是考虑求解的速度问题,A*求解速度虽然比Dijkstra快,但仍然难以满足实时变化的坐标点之间寻路的要求,尤其是3d地形而路径又比较长的情况下。魔兽这样做能满意玩家实时画面动态更新的效果,不会让玩家有停滞的感觉,然而就让玩家多了不少的操作,尤其像我操作比较难的玩家来说是一种噩梦。这样让我想到难道真的没有办法么?昨天灵机一动想了一种比较折中的办法,就是根据寻路的直线长短来确实是用哪种方法进行寻路:程序首先判断英雄要到达的坐标点离自己坐标点的距离,如果距离超出一定范围则使用BSP算法,否则使用A*,这样做的好处是在追杀时往往距离较短用A*可以保证求解速度而又能找到一条好的路径,当距离比较远的时候,让英雄走多点弯路其实也感觉不出来。当然,这只是自己想想而已,实际运用情况如何还要看实际求解速度是否可以满足不让玩家感到延迟的需求。后来自己又研究了一下A*算法,发现在有障碍物的情况下搜素范围还是有点大,就想了一种办法来改进,这个得等空闲的时候再把算法写出来看看效率啦哈。
2、游戏与计算机图形学
之前一段时间研究游戏服务端的东西比较多,近来把重点转到了客户端。说实在像公司现在的2D引擎是没什么特别可研究的,除了学下如何封装,以及一些功能的需求以外,要看当然得看3D的啦。说到3D肯定离不开计算机图形学啦,还记得当年大二的那门课,想想现在确实是这么有用的,不过当初是没好好地学,现在就得好好地补回来,结果发现这确实是门高深的学问加上自己数学基础又不是很好,所以以后还是得多花点心思才行哇。然后当然就是OpenGl啦,现在做游戏3D最出名的莫过于D3D和OpenGl了,基于OpenGl是跨平台的而且自己又是学习过一下,所以就又研究了一下OpenGl的Api以及一些常用的用法。尽管都是搞了一些皮毛,但当是打个基础吧。现在还是觉得那句老话,用什么实现不是特别重要,重要的是思想和算法。
3、游戏与脚本语言
近来我们要搞一个flash的小游戏,用于嵌入小游戏的对战平台的,可能就是类似种菜的那种玩意。说实在做这个东西是没什么劲头的。不过领得工资就得做哇,加上近来也闲得有点不好意思了。于是花了两天时间研究了一下ActionScript,发现这个东东语法跟Java极像...话说回来现在学习一门新的编程语言两三天就差不多够了(当然我说的是基本的东西),因为语法及许多机制都是一样的。还记得以前有段时间对脚本语言像JavaScript、vb一类的比较反感,后来发现不同的语言是用在不同地方的,没有好不好之分,反而是学了python以后被其简洁优雅的语法吸引了。在游戏中把脚本语言语言的使用提升到一个高度,尤其是魔兽世界把lua一战成名了。当然脚本语言扩展性以及容易编写程序的特性使其成为游戏开发中必不可少的东西。
4、国内游戏与国外游戏
打游戏多了自然有对比,特别国内游戏和国外游戏形成了极大的不同引起了很高兴趣,就简略说说自己的一些感受吧。国内游戏基本上都是网络游戏,像点样的单机游戏几乎没有(什么连连看、对对碰之类的小游戏不算);国外则是有更多高质量的单机游戏,而相对而言网游则没有国内的泛滥。当然,这里面包含了市场和技术的因素,因为一款单机游戏很难长时间吸引玩家的,而且中国盗版严重,做单机游戏几乎是无利可图的。至于国内网游,基本上有两种,一种是可以长时间运营的,这种可是最能赚钱的,不过这样的游戏不多的,另一种则是3个月挂到的靠短期的运营捞取一匹。至于这种情况在国外多不多就不太清楚了。接着说说技术方面,国内游戏技术值得自豪的应该是网络这一块,因为国内游戏人数远比国外多,因此构建高性能服务器成为亟待解决的问题,这方面的技术基本与外国持平或者甚至超越。至于在客户端游戏表现和游戏AI上,国内与国外相比还是有不少的差距的。特别在3D和高级的AI上更是差距明显,国外的单机游戏像极品飞车、NBA、FIFA、无冬之夜等在3d表现和游戏AI上国内暂时是无法企及的。国外的许多单机游戏真的能长时间给人回味然后成为经典。
5、游戏与C++
做游戏脚本语言必不可少,而C++就是核心,所有核心的算法都是C++写的,这样才能保证运行的效率。近来自己也抽空深入一点地学习了一下C++,主要看了《深入浅出MFC》、《Effects C++》、《more Effects C++》,虽然还有很多没看完和不理解,不过确实都是好书,至于那本《深入C++对象模型》实在太难给我暂时放下了。其实《深入浅出MFC》简介的介绍了windows编程,C++的一些方面特性以及对一些英语用词的准确翻译令我印象深刻,是值得推荐的一本书,名符其实的“深入浅出”。至于《Effects C++》、《more Effects C++》比较精辟讲到了使用C++的关键点而且深入到一些编译器的机制也另我这个C++的菜鸟大开眼界,不过碍于水平有限以后还得多读多想才能真正的理解。
好吧,今晚就记录到这里了。