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してあげましょう。