使用AS3开发小游戏(1)

着手开发一款网页游戏,类似于开心农场。

当作写作日记,我计划每天一小时,30天把客户端搞定。

第1天

今天第一天,我想的是需要需要一个精灵类。AS3提供Sprite就可以满足基本的需求了。

但是如果需要载入外部位图或者外部swf文件则有需要很多额外的代码。

那么就把这些操作封装起来吧

用到了一个殿堂之路上的小技巧,就是把函数当作一个参数传入另一个函数。可以理解为回调函数

//定义可以接收函数参数的函数 function Load(foo:Function):void { foo(); return; } //定义一个函数 function Foo():void { trace("Hello Foo!"); return; } //使用 Load(Foo);

AS3中所有函数参数均为引用调用,相当于指针(int/Boolean等这些基本类型除外),因此我理解参数中对象的赋值就是指针的传递。

这样灵活实现很多东西,比如虚函数之类的东西。

下面是今天的成果,一个封装好的下载类,可以直接下载文件转成2进制格式保存在内存中。

具体看代码

CBINARYLoader.as

/** * 文件名:CBINARYLoader.as * 作者:小金先生 * 接口:CBINARYLoader * 用途:2进制加载外部资源的类,用户只需要知道返回给回调的值就是可用的Loader * 第一版:2010.6.11 */ package Net { import flash.display.Loader; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.utils.ByteArray; public class CBINARYLoader { public function CBINARYLoader() { } public function LoadRes(path:String, foo:Function):void { var variables:URLLoader = new URLLoader(); var request:URLRequest = new URLRequest(path); _foo = foo; variables.dataFormat = URLLoaderDataFormat.BINARY; variables.addEventListener(Event.COMPLETE, OnURLLoaderHandler); try { variables.load(request); } catch(error:Error) { trace("Unable to load the URL! " + error); } return; } private function OnURLLoaderHandler(event:Event):void { _content = event.target.data as ByteArray; _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, OnLoaderHandler); _loader.loadBytes(_content); } private function OnLoaderHandler(event:Event):void { _foo(_loader); } private var _content:ByteArray; private var _loader:Loader; private var _foo:Function; } }

而对于该类的使用者来说这些都是透明的,他只需要实现一个使用加载完成后的钩子操作即可。

如下:

var lili:CBINARYLoader = new CBINARYLoader (); var path:String = "test.swf"; lili.LoadRes(path, OnLoadRes); //回调 function OnLoadRes(loader:Loader):void { trace("load success!"); }

这样使用就方便了,只是我还不知道的是我下载了一整个SWF文件,我还能不能取出里面的对象。

如果可以取,那这个下载来意义不大。纯当使用AS3实现回调函数的练习。

明天继续。。。

 

 

你可能感兴趣的:(Flex/AS3)