开始学习Iphone开发也差不多三个月了,在这段时间里,从对c++死心塌地,慢慢地发现原来世界可以这么大,还有很多美丽的风景线,其中Object-C就是其一了。人如其名,开发语言一样,“Object + C”可以看出来它是C语言的超集,同时它也是面向对象的语言,这让我想起了大学里的一个学长,他是那么的喜欢C语言,忠于C语言,记起和他一次谈话“现在C语言好像也面向对象了”。那时的我没什么注意,事后也没有怎么上网查资料,现在感觉那时他就应该是说Object-C了。现在说说这段时间自己动手实践的一个简单的Object-C游戏框架 。
1.框架的core部分。这是在一个名叫“Touch Fighter2”的Demo里提取出来的核心代码,具体的设计如下:
GameObject —> PhysicalObject —> SpriteObject —> AnimationObject
—> ParticleSystemObject
(注:箭头表示“继承于”)
根基类GameObject给子类提供基本的框架与变量,具体的实现留给子类。我使用这些类来作为游戏节点的渲染者与行动者,节点的渲染与运动的任务赋予给他们,详细介绍到节点那里说。有了这样的设计,如果我想继续扩展新的功能,例如:3d特效,只要继承PhysicalObject,然后实现具体的操作即可。
2.场景节点类。它里面包含一个指针(Object-C有一个无类型指针id,使用Object-C让我觉得在写脚本),用来指向不同的GameObject类型,这样可以让场景节点的管理与渲染分开,增强扩展性,同时也支持了同一个节点,变化指针指向就改变了本质的作用。(本人也是按照自己想法,不知道这种设计好不好,希望高手指教)
3.节点的管理是简单的树形结构,为了使树节点足够简单,设计了基本的几个子节点,作为某类节点的根节点,同时并对某些节点的渲染函数进行重写了。
Scene
|
Root
|
——————————————————————————————
| | | | |
BackGround Layers Sprites Effects Widgets
4.在交互性节点管理中为UI的设计增加了一个根节点,专门负责UI响应消息,消息处理在最前面,本来感觉应该设计一个UI与场景节点分开的框架,但由于现在开发的是2D框架,所以觉得两者结合也挺不错的,因为UI节点也是用里面的core类实现。
5.消息机制是根据以前负责的项目设计出来的,没很大的改变,运用监听者模式,在发消息的时候遍历消息注册者,来找到对应处理的处理者,然后根据返回值是否进行消息传递下去。
6.基本的框架设计好后,我开始设计一些UI控件了,那些交互性UI的规则大概如下:
1)第一层UI的Z值为0,第二层为1,依次递增;
2)在使窗口最高层时,会遍历第一层,然后遍历所有子控件进行Z值设置;
3)由于UI交互性比较多,也与角色精灵一样,绘制前根据Z值(2D原因,Y值越大,Z值越大)排序;
4)用户可以自定义回调函数进行消息处理;
7.在开发多行文本框的时候,发现这个控件不简单啊,我大概的设计思想是以行为单位,每行自己负责渲染工作,但是在插入/删除的时候发现好麻烦,每次对那些挤下去或冒上来的字符需要处理,同时控件也支持插入图片,现在我那个设计是每个字符单独渲染,不知道改进成每行做成一张图片后再渲染出来会不会有性能的提高?
这个框架的细节很多,但上面的是感受最多的,我已经毕业两年了,工作也两年了,时间不长,要学的东西很多很多,特别这种更新速度特快的行业,有时自己很浮躁,总想快点弄出一个个成熟的2D/3D引擎框架出来,但从这次动手实现,发现实现一个简单的不难,但要实现一个好的,考虑的问题会有很多,所以学习真的要踏实,除去那种轻浮的心理,还有很长的路要走,成功也不是一天两天的简单事,把心放平,一步一步向着目标接近吧!
加油!