对这两个星期做的一个游戏框架进行总结。
主要解决问题是:
如何实现游戏场景的轮转
14:10 2009-9-21
打算用swfloader在主场景(客户端)从服务器load不同场景swf下来运行。前提是各个swf互不通信。但是后来发现和实际情况相差甚远,例如从子场景A返回到主场景,这时候是要使自场景A隐藏或者离开显示列表。但是这个命令是由主场景发出还是由自己发出,显然,正常情况是由前者控制的。这就要求要各个场景间互相通信。于是用swfloader的想法失败。代码泡汤。
21:29 2009-9-22
推翻昨天的做法,用自定义组件。大概框架是一个swf,然后各个场景均是主场景的子控件,这样就可以很方便控制各个控件的显示和隐藏。这是一个树状模型,有一个弊端,当子控件里面还有子控件的时候,根场景是控制不了的,这样做多少会让人觉得很别扭和笨拙
10:05 2009-9-23
使用自定义事件,实现各个组件间的通信,实现松散耦合。结合viewstack,和场景映射数组(arr["sence"] = senceobject),主场景需要两个函数,一个是返回上一层场景,一个跳入一下层场景,然后使用viewstack进行轮转场景。这样形成卫星模型,即使子场景中还有场景,他们之间的关系也是平行的。这样使场景控制权集中在根场景处。keep it simple!
0:46 2009-9-26
纯MXML做的几个场景,很手工作坊,手段比较低级。转而考虑子场景全部用AS。
这个游戏比较简单的是,没有出现碰撞的画面。或者说游戏元素很少。主要还是button比较多。
做了如下安排:
1,自定义button。继承sprite,做个轻量级按钮
2,各个子场景父类MyComponent。继承UIComponent,添加自定义事件。
3,由于到了主场景需要用到viewstack添加子容器,继承UIComponent导致类型转换出错,修改button继承UICompnent,MyComponent继承Canvas。代码如下
至此,一个松散耦合,组件关系独立,仅由一个主场景控制的,并且具有迁移性的结构完成。