Murayama blog.

プログラミングと、その次の話

アセットの取り込み

本日の最後、アセットのロードと埋め込み。


ここは勉強になった。ナイス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章おしまい。