一个简单的Object-C 2D框架总结

      开始学习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引擎框架出来,但从这次动手实现,发现实现一个简单的不难,但要实现一个好的,考虑的问题会有很多,所以学习真的要踏实,除去那种轻浮的心理,还有很长的路要走,成功也不是一天两天的简单事,把心放平,一步一步向着目标接近吧!

    加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值