Progression4から搭載されたResource関連がとても便利なのでメモ。
これまでも外部ファイル(swf、画像、mp3など)を読み込んで使い回す
ということは出来ましたが、それなりに手間がかかりました。
Progression4からはそれらを管理するResource系のクラスが登場し、
かなりシンプルになったようです。
michinoko blogさんで書かれていたことを参考に書いてみました。
package{ import flash.display.Bitmap; import flash.display.Sprite; import flash.net.URLRequest; import flash.system.LoaderContext; import jp.progression.commands.lists.SerialList; import jp.progression.commands.Func; import jp.progression.commands.net.LoadBitmapData; import jp.progression.data.getResourceById; public class MyLoadImage extends Sprite{ public var _id:String; // リソース格納ID /********************* * 外部画像読み込み */ public function MyLoadImage( url:String, group:String, id:String ){ _id = id; var serial:SerialList = new SerialList(); // 画像読み込んでキャッシュに格納 serial.addCommand( new LoadBitmapData( new URLRequest(url), { cacheAsResource:true, context:new LoaderContext(true), resGroup:group, resId:id })); // 貼り付け serial.addCommand( new Func( attachBitmap )); serial.execute(); } /********************* * 画像貼り付け */ protected function attachBitmap():void { // リソースからid指定で画像を取り出す var bmp:Bitmap = new Bitmap( getResourceById(_id).data ); // 貼り付け this.addChild( bmp ); } } }
こんな感じでSpriteのサブクラスを作っておいて下記のように呼び出します。
※動作確認してません。
var loadImage:MyLoadImage = new MyLoadImage( "hoge.jpg", "images", "image0" ); this.addChild( loadImage );
例えばこのSpriteをクリックした時に、
idを取得して画像を再利用するなんてことも簡単にできますね。
protected function onImageClick( e:MouseEvent ):void{ var id:String = e.currentTarget._id; var bmpdata:BitmapData = getResourceById(id).data; ~取り出したBitmapDataを再利用~ }
Progressionのこういった便利ライブラリはとても重宝しています。
開発者の方々に心から感謝!!!
上記サンプルでは「resGroup」、「resId」でグループ、IDを指定していますが、
これらは「4.0.1 Public Beta 1.3」から使えるようになります。
自分は1.2だったのでハマりましたw
1.3からはWebConfig()の引数も変わったので注意が必要です。
自分はIndex.asで下記のように指定しています。
// 1.2の場合 super( "index", IndexScene, new WebConfig( false, false, false ) ); ↓ // 1.3の場合 super( "index", IndexScene, new WebConfig( "basicLibraryLicense", false, false, false ) );
![]() |
Adobe Flash CS4 詳細!ActionScript3.0入門ノート[完全改訂版](CD-ROM付) ソーテック社 2009-08-01 |
No comments yet.