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 |
コメントはまだありません。