なんだかhttp://www.greenparks.jp/のローダーが丸くて気持ちよいのでProgression用につくってみた。
import ore.graphic.Ball;て円を書くだけのクラスをつかって手抜きで作成。
できたのは こんな感じ。まんまですね。。
swfそのまま開きます。
http://miraigyo.com/blog/contents/swf/loader1/preloader.swf
そーすは以前とほぼ同じです。
Preloader.as
package myproject {
import flash.display.StageAlign;
import flash.display.StageQuality;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.trace.Trace;
import jp.progression.casts.*;
import jp.progression.commands.*;
import jp.progression.core.debug.Verbose;
import jp.progression.events.*;
import jp.progression.loader.*;
import jp.progression.*;
import jp.progression.scenes.*;
import ore.graphic.Ball;
import flash.text.TextFieldAutoSize;
/**
* Preloader クラス
*/
public class Preloader extends CastPreloader {
private var stageW:Number;
private var stageH:Number;
private var innnerBall:Ball;
private var ball:Ball;
private var txt:TextField;
private var num:Number = 0;
public static var flag:int = 0;
private var parsetage:Number = 0;
private var loadNum:Number = 0;
/**
* コンストラクタ
*/
public function Preloader() {
// 読み込みたい SWF ファイルの URL を設定します。
url = "index.swf";
// SWF ファイルの URL の起点を、自身の SWF ファイルが存在するフォルダにするかどうかを指定します。
useSWFBasePath = false;
}
/**
* SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
*/
protected override function _onInit():void {
// stage の初期設定を行います。
align = StageAlign.TOP_LEFT;
quality = StageQuality.HIGH;
scaleMode = StageScaleMode.NO_SCALE;
// 開発者用の出力を有効化します。
//Verbose.enabled = true;
//Verbose.filteringCommand();
stageW = stage.stageWidth;
stageH = stage.stageHeight;
ball = new Ball(40, 0x36362C);
ball.scaleX = 0;
ball.scaleY = 0;
ball.alpha = 0;
ball.x = stageW/2;
ball.y = stageH/2;
addChild(ball);
innnerBall = new Ball(40,0xA8AD80);
innnerBall.x = stageW/2;
innnerBall.y = stageH / 2;
innnerBall.scaleX = 0;
innnerBall.scaleY = 0;
addChild(innnerBall);
var format:TextFormat = new TextFormat();
format.font = "Arial";
txt = new TextField();
txt.autoSize = TextFieldAutoSize.CENTER;
txt.appendText("0%");
txt.x = stageW / 2-txt.width/2;
txt.y = stageH / 2 - txt.height / 2;
txt.embedFonts = true;
txt.defaultTextFormat = format;
txt.textColor = 0xffffff;
addChild(txt)
}
/**
* オブジェクトが読み込みを開始した瞬間に送出されます。
* このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
*/
protected override function _onCastLoadStart():void {
// 実行したいコマンドを登録します。
addCommand(
new DoTweener(ball, {
alpha:1,
scaleX:1,
scaleY:1,
time:0.6
})
);
stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
/**
* ダウンロード処理を実行中にデータを受信したときに送出されます。
*/
protected override function _onProgress():void {
loadNum = bytesLoaded / bytesTotal;
}
/**
* オブジェクトが読み込みを完了した瞬間に送出されます。
* このイベント処理の実行中には、addCommand() メソッド、及び insertCommand() メソッドによるコマンドの同期処理が行えます。
*/
protected override function _onCastLoadComplete():void {
// 実行したいコマンドを登録します。
var comnd:LoaderCommand = new LoaderCommand();
addCommand(
comnd,
[
new DoTweener(ball, {
alpha:0,
scaleX:1.5,
scaleY:1.5,
time:1
}),
new DoTweener(innnerBall, {
scaleX:0,
scaleY:0,
time:1
}),
new DoTweener(txt, {
alpha:0,
time:1
})
]
);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// ローダーのあにめーしょん
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
private function onEnterFrame(e:Event):void
{
parsetage += (loadNum - parsetage) * 0.2;
innnerBall.scaleX = parsetage;
innnerBall.scaleY = parsetage;
txt.text = String(Math.floor(parsetage*100))+"%";
if (parsetage > 0.98) {
txt.text = "100%";
stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
flag = 1;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// flag getter
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
public static function get getFlag():int {
return flag;
}
}
}
LoaderCommand.as
package myproject{
import jp.progression.casts.*;
import jp.progression.commands.*;
import jp.progression.core.commands.Command;
import jp.progression.events.*;
import jp.progression.loader.*;
import jp.progression.*;
import jp.progression.scenes.*;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.Event;
/**
* MyCommand クラス
*/
public class LoaderCommand extends Command {
private var _returnValue:String;
private var timer:Timer;
private var flag:int;
/**
* コンストラクタ
*/
public function LoaderCommand( initObject:Object = null ) {
super( _execute, _interrupt, initObject );
}
/**
* 実行されるコマンドの実装です。
*/
private function _execute():void {
// 通常処理を終了します。
timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER, onTime);
timer.start();
}
private function onTime(e:TimerEvent):void
{
flag = Preloader.getFlag;
if(flag == 1){
executeComplete();
timer.removeEventListener(TimerEvent.TIMER, onTime);
}
}
/**
* 中断実行されるコマンドの実装です。
*/
private function _interrupt():void {
// 中断処理を終了します。
interruptComplete();
}
/**
* MyCommand インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。
*/
public override function clone():Command {
return new LoaderCommand( this );
}
public function get returnValue():String {
return _returnValue;
}
}
}

