很久很久以前,好吧,大概是2008年,也就是俺还在上大学的时候,我在windows下用openGL写过一个3D连连看的游戏。虽然现在回头看来,这个作品实在是不成熟,技术也基本上是胡拼乱凑,代码不堪入目,但是呢,总算是个还有那么点意思的玩意儿。研究iOS以来,一直想把这个游戏移植到iPad上来,苦于一是没时间,二是现在想法越来越多,顾虑越来越多,反倒是这么久都没动起手来。现在想想,反倒是当年什么都不会,仅仅会一点点VC6.0,会一点点OpenGL的时候,自我感觉良好,无知无畏,有的是时间,反倒是胡乱的作出了点东西来。现在又怕美工不够好,又怕代码不够整洁,又怕技术实现不够完美,又怕做了没人玩儿浪费时间,一拖再拖,自己的开发者账号都快过期了,也没能动起手来。所以我觉得实在是不能再拖了,该动手做起来,有问题,碰到再解决。
实话实说就是OpenGL一直都是出于学过,但没用过的阶段,而且到了iOS上又要用OpenGL ES,更是觉得有些麻烦。还好那天突然发现有个3D引擎叫cocos3d,是基于cocos2d的,虽然cocos2d也没怎么用过,但至少看过,而且它的设计哲学也是足够的简单,所以理解起来还是很容易的。我简单的测试了一下性能,8*8*8的立方体群在我的iPad2上够达到30左右的FPS,基本上符合我的要求,遂决定,把这个游戏用cocos3d引擎来做。
简单说下cocos3d。cocos3d设计的理念是,把3D场景作为一个cocos2d的Layer放在cocos2d的场景中,这样,一个cocos3d游戏是寄生在cocos2d引擎之上的,这样就可以充分的利用cocos2d的各种便利,比如菜单,记分牌等,都可以用之前2d的方法来做。所有的3d物件都隶属于3d layer下的一个cc3scene,构成一个与cocos2d类似的树状结构。这个3d layer负责了把触摸消息下发到3d场景,cc3scene提供了各种功能,比如击中测试等。而且3d场景下的物件也能够想2d下的物件以类似的方法做插值动画,非常简便。
总之呢,用这个引擎,免去了很多研究OpenGL ES的麻烦,但是牺牲的是可以优化的效率,毕竟这个游戏是个足够特殊的应用场景,可以在很多地方进行优化,但是现在是效率为先,先做出来再说,以后有精力,或者说万一这游戏火了,再谈优化的事。
下面简单拟定一下游戏的框架:
除了游戏主题的立方体外,所有的菜单,记分牌,过场动画都以2D方式展现。主要的几个界面就是:1.首页,可以选过关模式,自由模式,游戏记录,帮助关于等;2.关卡选择,从一堆的icon中选择管卡,玩过的关卡显示得到的星数;3.游戏主界面,包括3D层的主游戏场景,相关信息(时间,剩余块等),工具(提示,洗牌等),菜单(暂停等);4.游戏结束屏(成功?失败?);5.游戏的帮助和关于信息
模块分为如下几个:1.逻辑计算,包括地图的生成,匹配的判别,胜负判定,自动判断局面等;2.显示和交互模块,完全基于cocos3d引擎,现实的内容来自于逻辑模块;3.相关信息的记录,这个可以记录在数据库,也可以记录在系统的default里,这个可以以后再决定。
下一步的工作,当务之急是把前两个模块做起来,关卡的设计可能要单独做一个关卡设计器,来设计足够多的样式的关卡地图。
做的差不多的时候我会把涉及到的技术点写几篇博客放在这里,并且争取在游戏上线后把代码放到GitHub上。