使用FLEX 和 Actionscript开发FLASH 游戏2-2


使用FLEX 和 Actionscript开发FLASH 游戏2-2
2010年10月23日
  GameObjectManager.as Package {     import mx.core.*;     import mx.collections.*;     import flash.display.*;     public class GameObjectManager     {         //doublebuffer         public var backBuffer:BitmapData;         //colour to use to clear backbuffer with         public var clearColor:uint=0xFF0043AB;         //static instance         protected statci var instance:GameObjectManager = null;         //the last frame time         protected var lastFrame:Date;         static public function get Instance():GameObjectManager         {             if(instacne == null)                 instance = new GameObjectManager();             return instance;         }         public function GameObjectManager()         {             if(instance != null)                 throw new Error("Only one Singleton instance should be                instantiated");             backBuffer = new BitmapData(Application.application.width,             Application.application.height,false);         }         public function startup():void         {             lastFrame = new Data();         }         public function shutdown():void         {         }         public function enterFrame():void         {             //Calculate the time since the last frame             var thisFrame:Date=new Date();             var seconds:Number=(thisFrame.getTime()-lastFrame.getT ime             ())/1000.0;             lastFrame = thisFrame;             drawObjects();         }         protected function drawObjects():void         {             backBuffer.fillRect(backBuffer.rect,clearColor);         }     } }    游戏对象管理器(GameObjectManager)对象负责管理组成最终游戏的各个元素,比如:敌人、游戏者和各种不同的背景元素,它还负责管理画这些元素的后台缓冲,如果你回想起前台缓冲是把它作为一个画布元素来实现的,这是因为一个画布能够被作为应用程序的一个孩子直接加到应用程序里是很方便的。后台缓冲是把它作为一个位图数据对象来实现的。这使得我们能够直接快速地复制作为最后图像的像素。
  clearColor属性指定了图像建立起来之前用来擦除后台缓冲用的颜色。最终整个后台缓冲将被游戏元素所覆盖,和这个颜色不同,但是现在这个颜色很重要,因为它将把最终的帧涂成一整块。值0xFF0043AB 代表深蓝色。最前面的两位16进制值(在0x之后的)代表了alpha:FF 表示不透明,00表示透明。随后的六位16进制值构成了红(00)绿(43)蓝(AB)组件。
  静态instance属性和Instance函数一起使用来实现单态设计模式。基本上我们在程序里总是只需要一个GameObjectManager对象存在(顾名思义)。通过参考GamaeObjectManager里的instance 属性,我们可以总是只有一个GameObjectManager生成。单态设计是一种相当普通的程序设计模式,当actionscript 缺少对私有构造器的支持它仍然可以作为一个有用的自我测试工具(只要你看见一个Instance属性,极有可能对象是单态设计模式。
  lastFrame属性仅仅存储了最后一帧被绘制的时间。通过保留时间轨迹,我们能够判断最后一帧和当前帧的相隔时间,这最终相反又允许我们依据这个时间来更新游戏元素。即使我们还没有任何游戏元素,我们仍然在enterFrame函数中以秒来计算帧之间的时间。当调用startup函数时,lastFrame时间被重置,这是因为程序不在游戏状态时GameObjectManager不能被更新。如果我们不去重置lastFrame,下一级的第一帧时间将和游戏者在菜单的各个级别之间花费的时间相等。游戏者能够在第一帧通过级别直接结束游戏,而这可以被很好地避免。(通过重置lastFrame)
  那么现在我们完成了什么呢?通过实现状态我们生成了一个菜单屏幕,游戏者能够从这里通过点击按钮进入游戏。"游戏"本身只是一个双缓冲的实现,这里还只是画了一个蓝色的背景。最后通过实现状态和绘制,我们能够做到一个有趣的事情:画屏幕。
  最终结果在http://flexfighters.sourceforge.net/flexfighter2.h tml请在以下链接下载源代码:https://sourceforge.net/project/showfiles.php?grou p_id=241490&package_id=293860&release_id=631382

猜你喜欢

转载自zskc07zskc.iteye.com/blog/1571875
今日推荐