Starling flash 简单应用

   转自: http://www.riadev.com/flex-thread-1929-1-1.html

   学习:http://www.adobe.com/cn/devnet/flashplayer/articles/introducing_Starling.html

flashplayer11给我们带来了巨大的性能提升,这一点不言而喻,大家都讲GPU加速主要用户3D画面中,不错。这是adobe的初衷。不过我们也可以使用GPU来加速我们的2D画面,这样的操作很多人认为是多次一举,因为flash本身就对2D画面支持的非常好了,为什么还要用GPU来进行图像渲染操作呢?其实也是一个性能上的提升,关于这点我们就不再多说了,慢慢的,我们就可以在很多的商业项目中看到,基于GPU加速的2D flash应用在性能上也会有很大的提高。那么怎么样使用GPU来对2D画面进行加速呢?

    可能很多人都还不明白,认为flashplayer11是adobe内置了一个3D的引擎,这个引擎用来调用GPU,其实不是的。adobe为我们提供的仅仅是一些非常底层的API,利用这些API我们可以实现对GPU的调用。但是请不要忘记,使用这些API我们无法生成任何图像,因为他们实在是太底层了。所以我们需要用到一些第三方的引擎。这里Starling就是一个基于GPU加速的2D引擎。
    可能很多人都还不明白,认为flashplayer11是adobe内置了一个3D的引擎,这个引擎用来调用GPU,其实不是的。adobe为我们提供的仅仅是一些非常底层的API,利用这些API我们可以实现对GPU的调用。但是请不要忘记,使用这些API我们无法生成任何图像,因为他们实在是太底层了。所以我们需要用到一些第三方的引擎。这里Starling就是一个基于GPU加速的2D引擎。
    在adobe MAX2011大会上,adobe为我们展示了一个使用starling引擎来制作的flash游戏,其名称是《愤怒的小鸟》。感兴趣的童鞋可以到我的博客中观看这段视频。在adobe 官方视频教程板块中。
   
    在flash中运行如此复杂或者说如此多运算的程序,对于以前的flash来说需要进行大量的优化工作以达到我们预期的效果,但是现在有了GPU,我们就可以大胆的放开手脚来进行制作了。那么starling到底有哪些方便之处,以至于adobe在这么重要的大会中抽出一部分时间来进行演示呢?
    答案我想只有举办者才知道。但是我所知道的是,它不仅仅是方便好用,而且更易于以前项目的移植工作。例如,在这个引擎中我们可以看到Sprige、MovieClip或者Button这样熟悉的名字。不错。为了方便开发者移植工程,所有的类名称和以前相同,我们只需要将import 语句进行修改,然后小范围修改代码即可。虽然如此,但是笔者目前还没有找到将美工制作动画进行GPU加速的办法。目前不知道能不能行得通。至于starling,是使用程序来制作动画,非常适合游戏。在此忽略美工部分,说说咱程序员之间的事情吧!
   
    首先,想让你的画面显示,就需要纹理渲染,换句话说就是贴图。和3D引擎的中的概念很相像。只不过这里的纹理是2D场景中的。在starling引擎中控制纹理的操作由Texture类来执行。Texture类的所有纹理数据基本上都是来自于位图,或者位图数据。这一点没有任何问题。因为我们不可能从flash中的矢量图形中进行数据获取。矢量图的渲染还需要CPU来进行操作。
   
    下面我们来看一个简单的demo,这个DEMO中我们使用loader对象来加载一张图片,然后使用starling引擎来对其进行GPU加速操作。
   
    stex1.as

  1.     package
  2. {
  3.     import flash.display.Sprite;
  4.     import flash.display.StageAlign;
  5.     import flash.display.StageScaleMode;
  6.     import flash.geom.Rectangle;
  7.    
  8.     import starling.core.Starling;
  9.    
  10.     [SWF(width="320", height="480", frameRate="60", backgroundColor="#000000")]
  11.     public class stex1 extends Sprite
  12.     {
  13.         private var mStarling:Starling;
  14.         
  15.         public function stex1()
  16.         {
  17.             stage.scaleMode = StageScaleMode.NO_SCALE;
  18.             stage.align = StageAlign.TOP_LEFT;
  19.             
  20.             //Starling.multitouchEnabled = true;
  21.             
  22.             mStarling = new Starling(mys, stage,new Rectangle(0,0,320,480));
  23.             //mStarling.simulateMultitouch = true;
  24.             //mStarling.enableErrorChecking = false;
  25.             mStarling.antiAliasing= 1;
  26.             mStarling.start();
  27.             
  28.         }
  29.     }
  30. }
普通浏览 复制代码 保存代码 打印代码
  1.     package
  2. {
  3.      import flash.display.Sprite ;
  4.      import flash.display.StageAlign ;
  5.      import flash.display.StageScaleMode ;
  6.      import flash.geom.Rectangle ;
  7.     
  8.      import starling.core.Starling ;
  9.     
  10.     [SWF ( width = "320"height = "480", frameRate = "60"backgroundColor = "#000000" )]
  11.      public  class stex1  extends Sprite
  12.     {
  13.          private  var mStarling :Starling ;
  14.         
  15.          public  function stex1 ( )
  16.         {
  17.             stage. scaleMode  = StageScaleMode.NO_SCALE ;
  18.             stage. align  = StageAlign.TOP_LEFT ;
  19.             
  20.              //Starling.multitouchEnabled = true;
  21.             
  22.             mStarling  =  new Starling (mys, stage, new Rectangle ( 0, 0, 320, 480 ) ) ;
  23.              //mStarling.simulateMultitouch = true;
  24.              //mStarling.enableErrorChecking = false;
  25.             mStarling.antiAliasing =  1 ;
  26.             mStarling. start ( ) ;
  27.             
  28.         }
  29.     }
  30. }
  31.  


mys.as
  1. package
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.BitmapData;
  5.     import flash.events.ProgressEvent;
  6.    
  7.     import starling.display.Button;
  8.     import starling.display.Image;
  9.     import starling.display.Sprite;
  10.     import starling.events.Event;
  11.     import starling.textures.Texture;
  12.    
  13.     public class mys extends Sprite
  14.     {
  15.         private var d:data = new data();
  16.         public function mys()
  17.         {
  18.             
  19.             d.addEventListener(ProgressEvent.PROGRESS,ok);
  20.             
  21.         }
  22.         private function ok(evt:ProgressEvent):void
  23.         {
  24.             
  25.             var bg:Image = new Image(Texture.fromBitmap(d.bit) );
  26.             this.addChild(bg);
  27.         }
  28.         
  29.     }
  30. }
普通浏览 复制代码 保存代码 打印代码
  1. package
  2. {
  3.      import flash.display.Bitmap ;
  4.      import flash.display.BitmapData ;
  5.      import flash.events.ProgressEvent ;
  6.     
  7.      import starling.display. Button ;
  8.      import starling.display.Image ;
  9.      import starling.display.Sprite ;
  10.      import starling.events.Event ;
  11.      import starling.textures.Texture ;
  12.     
  13.      public  class mys  extends Sprite
  14.     {
  15.          private  var d : data  =  new  data ( ) ;
  16.          public  function mys ( )
  17.         {
  18.             
  19.             d.addEventListener (ProgressEvent.PROGRESS,ok ) ;
  20.             
  21.         }
  22.          private  function ok (evt :ProgressEvent ) : void
  23.         {
  24.             
  25.              var bg :Image  =  new Image (Texture.fromBitmap (d.bit )  ) ;
  26.              this.addChild (bg ) ;
  27.         }
  28.         
  29.     }
  30. }
  31.  


data.as
  1. package
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.Loader;
  5.     import flash.display.LoaderInfo;
  6.     import flash.events.Event;
  7.     import flash.events.EventDispatcher;
  8.     import flash.net.URLRequest;
  9.     import flash.events.ProgressEvent;
  10.    
  11.     public class data extends EventDispatcher
  12.     {
  13.         public var bit:Bitmap;
  14.         
  15.         private var a:Loader = new Loader();
  16.         public function data()
  17.         {
  18.             a.load(new URLRequest("../media/textures/background.png") );
  19.             a.contentLoaderInfo.addEventListener(Event.COMPLETE,ok);
  20.         }
  21.         private function ok(evt:Event):void
  22.         {
  23.             trace(a.content + "*********");
  24.             this.bit = a.content as Bitmap;
  25.             
  26.             var shijian:Event = new ProgressEvent(ProgressEvent.PROGRESS);
  27.             this.dispatchEvent(shijian);
  28.         }
  29.     }
  30. }

普通浏览 复制代码 保存代码 打印代码
  1. package
  2. {
  3.      import flash.display.Bitmap ;
  4.      import flash.display.Loader ;
  5.      import flash.display.LoaderInfo ;
  6.      import flash.events.Event ;
  7.      import flash.events.EventDispatcher ;
  8.      import flash.net.URLRequest ;
  9.      import flash.events.ProgressEvent ;
  10.     
  11.      public  class  data  extends EventDispatcher
  12.     {
  13.          public  var bit :Bitmap ;
  14.         
  15.          private  var a :Loader  =  new Loader ( ) ;
  16.          public  function  data ( )
  17.         {
  18.             a. load ( new URLRequest ( "../media/textures/background.png" )  ) ;
  19.             a.contentLoaderInfo.addEventListener (Event.COMPLETE,ok ) ;
  20.         }
  21.          private  function ok (evt :Event ) : void
  22.         {
  23.              trace (a.content  +  "*********" ) ;
  24.              this.bit  = a.content as Bitmap ;
  25.             
  26.              var shijian :Event  =  new ProgressEvent (ProgressEvent.PROGRESS ) ;
  27.              this.dispatchEvent (shijian ) ;
  28.         }
  29.     }
  30. }
  31.  

  
2011-11-20 17:42:05 上传
下载附件(93.83 KB)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包括 PDF文档 文档中对STARLING以及相关框架的介绍以及代码实例 内容包括AS3 项目源文件两个 包含PDF中提到的例子 以及运行效果SWF10个 在Stage3D出现之前,Flash3D引擎( Papervision3D, Away3D,…)都是软解 CPU是通用处理器,没有为渲染三角形而优化过 Stage3D是一个新的Flash API。它专门用于实时3D渲染。用Stage3D,你可以让Flash充分利用用户计算机的GPU硬件加速能力。 GPU渲染过程比软件渲染模式快多了。GPU被设计用来干专门的工作:计算顶点和渲染三角形,如此而已。因为GPU硬件被用来处理专门的工作,所以硬件加速3D渲染就非常高效! Stage3D的API相对仍较为繁琐 • 比如绘制一个图形,在传统Stage中使用绘图API可能只需要几行代码,而Stage3D实现同样的图形显示却需要几十行或上百行代码 Starling的英文原意是叫做“八哥”的小鸟。 不过在Flash领域,Starling是一个ActionScript类库,它模仿了传统的 Flash显示列表。然而,和传统的显示对象不同,Starling对象完全存在于Stage3D环境。这意味着,所有的显示对象都直接由GPU渲染,这 会带来非常明显的性能提升。 Starling并不是直接1:1的复制Flash API。所有的类都针对GPU模式进行了精简和优化。Starling向开发者隐藏了Stage3D的内部细节,但如果您想创建自定义显示对象,也可以很容易访问到它们。 StarlingMVC是一个为使用Starling来开发游戏的MVC框架。这个框架的特性方面,很像Swiz和RobotLegs。特性列表如下: • 依赖注入(DI)/控制反转(IOC) • 视图代理(View Mediation) • 事件捕获(Event Handling) • 非侵入性框架 • 配置简单 • 容易扩展 • 包含了很多对您的游戏有帮助的工具 StarlingMVC 框架是基于 Apache License 2.0协议开源的. 以上为部分PDF内容

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值