使用FLEX和 Actionscript 开发FLASH游戏(三)-4

使用FLEXActionscript开发FLASH 游戏-嵌入资源和增加游戏元素(第四页,共四页)

 

Bounce.as

package

{

    import flash.geom.*;

    import mx.core.*;

    public class Bounce extends GameObject

    {

           //movement speed of the bouncing object

           protected static const speed:Number=100;

       //direction that the bouncing object should move(1 for right/down,-1 for left/up)

           protected var direction:Point=new Point(1,1);

              public function Bounce()

              {

                super();

              }

              public function startupBounce():void

              {

                  super.startupGameObject(ResourceManager.BrownPlaneGraphics,new Point(0,0));

              }

           override public function shutdown():void

           {

               super.shutdown();

           }

           override public function enterFrame(dt:Number):void

           {

                  super.enterFrame(dt);

                  position.x+=direction.x*speed*dt;

                  position.y+=direction.y*speed*dt;

                  if(position.x>=Application.application.width-graphics.bitmap.width)

                      direction.x=-1;

                  else if(position.x<=0)

                            direction.x=1;

                  if(position.y>=Application.application.height-graphics.bitmap.height)

                            direction.y=-1;

                  else if(position.y<=0)

                            direction.y=1;

              }

    }

}

Bounce类是一个继承基础类GameObject的例子,给游戏元素增加了一些专门的逻辑语言。在这里逻辑语言只是仅仅用来使得游戏元素在屏幕里面到处移动。

Bounce有两个属性。速度定义了游戏对象将在屏幕里面四处多快地移动,方向定义了游戏对象当前在xy坐标轴移动的方向。

我们在这个对象里面再一次用到了startupshutdown函数对。我曾告诉过你他们将是一个共同主题。在这里我们仅仅是继承了GameObjectstartupshutdown函数。

enterFrame函数用来在绘制循环中更新对象本身。Bounce对象在它撞到屏幕边缘之前只是仅仅做直线运动,然后当撞到后作反方向运动。这不是太灵巧,但是Bounce类在最终游戏不会出现;它唯一的目的是作为一个简单的示范来显示GameObject时如何被继承的。

最后的两个类用来让我们开始在屏幕上绘制,它们是ResourceManagerGraphicsResource

资源管理是游戏的一个重要的方面。你将如何包装你游戏中的图形和声音效果?你怎样载入它们?它们存储在哪里?这些是简单的问题,但是包含着巨大的影响。粗略地说Flex给你三个选项来访问图形和声音资源。第一个:从本地磁盘载入它们。虽然这是载入资源的传统方式,对于一个在网络上玩的游戏这不是一个可行的方法。基于此Flex也允许你载入存储在网络服务器上的资源。但是虽然这使得最终用户不必在本地磁盘上保存任何东西,但是它也意味着游戏SWF文件和其他的游戏资源必须作为单独分开的文件来存储。谢天谢地Flex提供了第三种选项:直接把资源嵌入到最终的SWF文件。

嵌入一个资源你可以使用嵌入(Embed)标签。只要你嵌入的文件被Flex识别(包括海量的图形格式,还有声音的MP3格式)Flex将把文件直接编译进最终的SWF文件里,而且通过一个类来列出文件的内容。

ResourceManager被用来作为嵌入和访问游戏资源的地方。它根本没有任何函数:它唯一的目的是列出描述嵌入资源的属性。这里我们定义了1个图形资源:brownplane.png图形。

ResourceManager.as

package

{

    import flash.diaplay.*;

    public final class ResourceManager

    {

        [Embed(source="../media/brownplane.png")]

        public static var BrownPlane:Class;

        public static var BrownPlaneGraphics:GraphicsResource=new GraphicsResource(new BrownPlane        ());

    }

}

为了使用嵌入的图形我们需要从原始图片中分离出alpha(或者即透明的)层。如果你回顾下在GameObject类中的coptToBackBuffer函数你将知道copyPixels函数即使用了GraphicsResource对象的bitmap属性也使用了它的alphaBitmap属性。从一个嵌入的图片上提取和展示这些元素是GraphicsResource类的唯一目的。现在让我们看下GraphicsResource类。

GraphicsResource.as

 

package

{

    import flash.display.*;

    public class GraphicsResource

    {

        public var bitmap:BitmapData=null;

        public var bitmapAlpha:BitmapData=null;

        public function GraphicsResource(image:DisplayObject)

        {

            bitmap=createBitmapData(image);

            bitmapAlpha=createAlphaBitmapData(image);

        }

        protected function createBitmapData(image:DisplayObject):BitmapData

        {

            var bitmap:BitmapData=new BitmapData(image.width,image.height);

            bitmap.draw(image);

            return bitmap;

        }

        protected function createAlphaBitmapData(image:DisplayObject):BitmapData

        {

            var bitmap:BitmapData=new BitmapData(image.width,image.height);

            bitmap.draw(image,null,null,flash.display.BlendMode.ALPHA);

            return bitmap;

        }

    }

}

在上面提到GraphicsResource有两个属性:bitmapbitmapAlpha。这些属性通过createBitmapDatacreateAlphaBitmapData函数从嵌入的图形中提取出来传给构造器。一旦它们被提取出来它们就有了一个方便使用的形式,在GameObjectcopyToBackBuffer函数中调用的copyPixels函数使用。

那么我们干成了什么?我们在本系列的第一部分和第二部分的基础性工作上嵌入了资源(ResourceManagerGraphicsResource),生成了更多特定游戏对象的基本类(GameObject),最后把它们全部整合起来给屏幕增加了一个移动的对象(Bounce)。

在本系列的第四部分我们将增加一个游戏者能控制的对象,除此之外还生成一个可供游戏者在其上飞行的滚动的背景。

http://flexfighters.sourceforge.net/flexfighters3.html可查看最终结果,从https://sourceforge.net/project/showfiles.php?group_id=241490&package_id=293860&release_id=631869可下载资源。

图片

 

<前一页 | 页数:1 2 3 4 | 本系列下篇论文>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值