4
画像が削除されたり、リロード時のエラーに対してのエラー処理をおこなう。
/**
* Copyright megane_bomb1 ( http://wonderfl.net/user/megane_bomb1 )
* GNU General Public License, v3 ( http://www.gnu.org/licenses/quick-guide-gplv3.html )
* Downloaded from: http://wonderfl.net/c/xajY
*/
// forked from megane_bomb1's 3
package {
//画面表示の構築のコア
import flash.display.*;
//load()などのメソッドに渡される
import flash.net.URLRequest;
//イベント系
import flash.events.*;
//LoaderContextのため
import flash.system.*;
//text表示
import flash.text.*;
//Debug
import com.demonsters.debugger.MonsterDebugger;
// timer
import flash.utils.Timer;
import flash.utils.setInterval;
public class Main extends Sprite {
// LoaderContextを準備
private var context:LoaderContext = new LoaderContext(true);
// イメージファイルをロードする
private var load_img:Loader = new Loader();
//private var url:String = "http://farm2.static.flickr.com/1340/4727293104_c093890c85_b_d.jpg";
private var url:String = "http://www.flickr.com/photos/megane_bomb/4727293104/sizes/l/";
//画像の場所の指定
private var url_img:URLRequest=new URLRequest(url);
private var h:int = 0;
private var aData:Array = new Array();
//fullscreanの為のフラグ
private var flg:int = 0;
//コンストラクタ
public function Main():void {
//一番はじめじゃないtrace使えない
MonsterDebugger.initialize(stage);
MonsterDebugger.trace(this,"first");
//初期化
setStage();
loadImage();
}
// ステージの設定
private function setStage():void {
stage.addEventListener( Event.RESIZE, resizeListener);
//NO_SCALEでないと、リサイズイベントが発生しない
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
}
//イメージの読み込み
private function loadImage():void {
load_img.load(url_img,context);
//読み込んだ後に実行される
load_img.contentLoaderInfo.addEventListener( Event.COMPLETE , onComplete );
//errorのイベント
load_img.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
}
private function onComplete( event:Event ):void {
// イメージのサイズを指定
var aData:Array = new Array();
aData = getResizeimg( load_img.width, load_img.height );
load_img.width = parseInt( aData[ 'width' ] );
load_img.height = parseInt( aData[ 'height' ] );
stage.addChild( load_img );
//removeひつよう?
//load_img.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
}
//縦横比の対応関数
private function getResizeimg( width:int, height:int ):Array {
var tWidth:int;
var tHeight:int;
var h:Number;
//比率の計算
h = width/stage.stageWidth;
tHeight = height/h;
//横に合わせる
if(tHeight < stage.stageHeight){
tWidth = stage.stageWidth;
//縦に合わせる
}else{
h = height/stage.stageHeight;
tWidth = width/h;
tHeight = stage.stageHeight;
}
aData[ 'width' ] = String(tWidth);
aData[ 'height' ] = String(tHeight);
return aData;
}
//ブラウザのリサイズが行われたときに実行される
private function resizeListener( event:Event ):void {
//リサイズ時になぜかaddchildが消えている
MonsterDebugger.trace(this,this.contains(load_img));
if(flg == 0){ //初回
loadImage();
flg = 1;
MonsterDebugger.trace(this,"second");
}else{ //初回以外
aData = getResizeimg( load_img.width, load_img.height );
MonsterDebugger.trace(this,this.contains(load_img));
load_img.width = aData[ 'width' ];
load_img.height = aData[ 'height' ];
}
}
//error
private var tf:TextField = new TextField();
private function errorHandler(event:ErrorEvent):void {
var format:TextFormat = new TextFormat();
//format.color = 0xFF0000;
format.font = "Verdana";
format.size = 40;
format.align = TextFormatAlign.CENTER;
tf.defaultTextFormat = format;
tf.width = stage.stageWidth;
tf.y = -100;
tf.text = "load error!";
stage.addChild(tf);
tf.addEventListener(Event.ENTER_FRAME,move);
}
//アルファプログラム関数
private function move(event:Event):void{
tf.y += 3;
if(tf.y == 200){
tf.removeEventListener(Event.ENTER_FRAME,move);
tf.addEventListener(Event.ENTER_FRAME,imgAlpha);
}
}
private function imgAlpha(event:Event):void{
tf.alpha -= 0.02;
if(tf.alpha == 1){
tf.removeEventListener(Event.ENTER_FRAME,imgAlpha);
}
}
}
}