一开始接触捕鱼游戏,对鱼的路径处理,采用CAD画图软件绘制出路径。
具体做法是,首先由程序员或者美工,使用CAD辅助绘图软件,将路径一一绘制出来,然后使用自制的插件,将路径图以指定的格式保存。在游戏内解析路径文件,构建一个路径管理对象,保存路径信息。在程序内,路径信息包含位置和角度信息,鱼的对象通过路径管理对象,就可以使用路径,在画面上按指定路线运动。
由于长时间以这种方式,指定鱼在画面上的位置和方向。于是乎,在我每次遇到,需要跑特殊路径的鱼或者是需要程序来计算来指定路径时,我下意识的想法是:根据位置来求角度信息。补充一下,鱼在画面上的姿态,是由位置和角度两个信息决定。如何用程序指定特殊的路线呢?曲线方程!但是,曲线方程的斜率,即鱼的前进方向是很难确定。在工作过程中,我的boss以前就是从事CAD绘图软件插件的编制的,他从不止一次的想我传达过,曲线离散化后,是很难精准的还原到显示器上。我在疯狂捕鱼原创团队出版的一本书里,得到的信息,也是先制定曲线,计算位置,再计算方向。这也坚定了我最初的想法。
后来同事在处理一条很特殊的鱼的路径时,一直出状况。这时,我们使用的框架是cocos2d-x,我同事使用CAction,点到点的移动,来确定运动路径。由于他在指定时间长短时,没有联合点到点的长度计算,导致速度不是忽然太快,就是忽然太慢。我当时就在想--速度,速度!!对,鱼的运动属性是由它的当前位置加速度决定。速度是一个向量,有大小和方向,方向就是运动的方向。于是,我用速率和速度的方向来计算鱼的下一点的位置,并直接用速度的方向指定鱼的方向。
一开始我使用的是S-T模式,即位置-时间关系,后面一个是使用V-T模式,即速度-时间关系。两个都可以确定鱼的下一点的位置。但是S-T模式,角度直接用程序计算是很复杂,主要也是我没法操作。
后来我一直在想,是什么使我陷入一种固定的思考方式。一条筋,差不多一直在位置和角度的计算上纠结。
思维定势加惰性!人都是有惰性的,如果以前解决过的问题,再次出现,一般是毫不犹豫的再次使用以前的方案,解决类似问题。在重用方案之前,作为一枚程序猿,应该做些什么工作呢?很多时候,程序员在采纳以往方案时,并没有思考,为什么一定要这么做。就是别人问起,一般也是很理所当然的回答:以前就是这样做的。可是以前为什么这样做?作为一枚优秀的程序猿,是应该积极的去思考。这个过程,是自己学习的过程,也是一个进一步去改进解决方案的机会。