アセットの取り込み
本日の最後、アセットのロードと埋め込み。
ここは勉強になった。ナイスActionScript3.0アニメーション本。
アセットってのは、構成要素っていう意味で、
外部のイメージやSWFのような外部リソースを指します。
で、ASでアプリを作るときには、
コンパイル時にアセットを取り込むか、実行時に取り込むか、
2通りの方法があります。
どちらの方法でやっても見栄えに違いはないですけど、
まずは、わかりやすいのは実行時に取り込む方法。
実行時にアセットを取り込むにはLoaderクラスを使います。
LoaderオブジェクトにはURLを引数に渡すことになりますが、
実際には、URLRequestクラスのオブジェクトを渡すことになります。
結果はこんなかんじ。
コードはこれだ。
package { import flash.display.Loader; import flash.display.Sprite; import flash.net.URLRequest; public class LoadAsset extends Sprite { public function LoadAsset() { init(); } private function init():void{ var loader:Loader = new Loader(); addChild(loader); loader.load(new URLRequest("http://ec2.images-amazon.com/images/I/51WjIMzzJ6L._SL500_AA240_.jpg")); } } }
次にコンパイル時にアセットを取り込む方法。
こいつはちょっと特殊です。
僕も最初見たときは、アノテーションみたいなん?なんかよくわからんけど、的なノリでした。
だけど、今はもうわかった。
先にコード。
package { import flash.display.Bitmap; import flash.display.Sprite; public class EmbedAsset extends Sprite { [Embed(source="spring.jpg")] private var Picture:Class; public function EmbedAsset() { init(); } private function init():void{ var bitmap:Bitmap = new Picture(); addChild(bitmap); } } }
ポイントは
[Embed(source="spring.jpg")] private var Picture:Class;
の部分で、メタデータタグでイメージファイルを埋め込んでいるかんじ。
メタデータタグは、すぐ下のステートメントの情報で、コンパイラによって処理される。みたい。
で、変数名と変数の型に注目です。
変数名は任意で良いですが、先頭を大文字にしておくとよさげです。理由は後でわかります。
変数の型はClass型にしなければいけません。これはそういうルールだと思って覚えてしまいます。
この宣言した変数Pictureは、次のようにしてオブジェクト化します。
var bitmap:Bitmap = new Picture();
そう、Class型の変数Pictuteをnewしちゃうんですね。
Class型だからnewできるんかな、他のクラスの変数はnewできないみたい。
これは妙な感覚でした。
あと、覚えておいた方が良いのは、
アセットがイメージファイル(jpgなど)の場合は、上記のコードでいけるみたいですが、
SWFファイルを取り込む場合は、
オブジェクト化するときに、Sprite型の変数に格納します。Bitmap型ではありません。
[Embed(source="spring.swf")] private var SwfAsset:Class; // 省略 // Sprite型 var bitmap:Sprite = new SwfAsset();
以上、4章おしまい。