5分で作るaction script3 サンプル 3(画像ファイルの読み込み)

第3回 画像ファイルの読み込み

第3回は第二回(画像の埋め込み)
と違い、画像の読み込みです。

以下のように記述すると
外部URL上にあるデータを取得してきて
画面に表示することができます。

各種イベントハンドラは別に書かなくても
動きますが、エラー処理や進行状況の
確認をしたい場合には書きましょう。

package {
	import flash.display.Sprite;
	import flash.display.Loader;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.events.HTTPStatusEvent;
	import flash.events.ProgressEvent;

	public class ImageLoader extends Sprite
	{
		public function ImageLoader()
		{
			var loader:Loader = new Loader();
			var url:URLRequest = new URLRequest("http://yino.sakura.ne.jp/hatena/blue.png");
            		loader.addEventListener(Event.COMPLETE, completeHandler);
            		loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            		loader.addEventListener(Event.INIT, initHandler);
            		loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            		loader.addEventListener(Event.OPEN, openHandler);
            		loader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            		loader.addEventListener(Event.UNLOAD, unLoadHandler);
            		loader.load(url);
            
            		addChild(loader);
        }

        private function completeHandler(event:Event):void {
            trace("読み込み完了: " + event);
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
            trace("http状態の変更: " + event);
        }

        private function initHandler(event:Event):void {
            trace("初期化 " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioエラー: " + event);
        }

        private function openHandler(event:Event):void {
            trace("オープン: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("ロード中: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
        }

        private function unLoadHandler(event:Event):void {
            trace("アンロード: " + event);
        }
		
	}
}

解説

	var loader:Loader = new Loader();
	var url:URLRequest = new URLRequest("http://yino.sakura.ne.jp/hatena/blue.png");

今回の肝はココ。
loaderクラスがデータを読み込んでくれます。loaderクラスは、
SWF ファイルまたはイメージファイルを読み込むときに利用します。

また外部URLを利用する場合には、Flashのセキュリティモデルの問題が
発生します。長く説明すると時間がかかるので端的に説明しますと
外部ドメインの元にcrossdomain.xmlがおいてありなおかつそのxml
当該URLからのアクセスを許可してる場合に、そのファイルにアクセスできます。


たとえば、http://yino.sakura.ne.jp/hatena/blue.pngのファイルにアクセスするためには
http://yino.sakura.ne.jp/crossdomain.xmlというファイルがある必要があります。

また、その中に

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <allow-access-from domain="*" />
</cross-domain-policy>

のようなアクセス元ドメインからのアクセスの許可が
ある必要があります。この場合は、『*』すべてのドメインからのアクセスが
許可されているので問題ありません。

        private function completeHandler(event:Event):void {
            trace("読み込み完了: " + event);
        }

        private function httpStatusHandler(event:HTTPStatusEvent):void {
            trace("http状態の変更: " + event);
        }

        private function initHandler(event:Event):void {
            trace("初期化 " + event);
        }

        private function ioErrorHandler(event:IOErrorEvent):void {
            trace("ioエラー: " + event);
        }

        private function openHandler(event:Event):void {
            trace("オープン: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("ロード中: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
        }

        private function unLoadHandler(event:Event):void {
            trace("アンロード: " + event);
        }
		

これらのイベントハンドラで進行状態などが監視できます。
ここでprogressバーなどを出すこともできるでしょう。

addChild(hello);

いつもどおりloaderを表示するために
Spriteにaddしてあげましょう。