2008年8月アーカイブ

Flashの案件で必須になるプリローダー。

外部化したファイルを読み込むローダーは、Loaderクラスを利用すればいいだけだけど
rootを読み込むプリローダーは?

まぁローディング処理だけのswfファイルを作って「loader.swf」とかにすりゃよさそうだけど
簡単なFlashムービーなど、swfファイルが1個で済むような場合
そんなまどろっこしいことしたくないよー

てことで
作ってみました。

サンプルを表示

//------------------------------------- 2009/4/28日追記 -------------------------------------//
結構リクエストがあったんで、Flaファイルもアップしてみた。

flaファイルダウンロード

//SWFファイル容量取得
var totalBytes:uint = this.loaderInfo.bytesTotal;

//イベントハンドラ設定
this.addEventListener(Event.ENTER_FRAME, loader);
//▼関数定義
function loader(evt:Event) {
    var loadPer:uint = Math.floor(this.loaderInfo.bytesLoaded / totalBytes * 100);
    par.text = loadPer;
    bar_mc.scaleX = loadPer/100;
    if (loadPer >= 100) {
        this.removeEventListener(Event.ENTER_FRAME, loader);
        parent.nextFrame();
    }
}

bar_mc.scaleX = 0;
stop();

1フレーム目にローダー用のMCを配置して、そのMCのタイムラインにコードを書いてます。
そうすれば、シンボルのコピペでそのまま使いまわせるってわけ。

//------------------------------------- 2009/2/26日追記 -------------------------------------//

ちょっと質問が来て、確かにこの書き方じゃ分かりづらいかなぁって事で、追記

上のソースは、1フレーム目に配置してある、ローダー用のMCの中に書いてます。
んで、「par」というインスタンス名のダイナミックテキストと、左端に基準点を置いた「bar_mc」というローディングバー用のインスタンスを配置してあります。

また、 「loaderInfo」プロパティは、「stage」クラスのプロパティで、
stageのloaderInfoプロパティの説明には ---------------------------------------------------------------------------------------------------------------------------------------
この表示オブジェクトが属するファイルの読み込み情報を含む LoaderInfo オブジェクトを返します。 loaderInfo プロパティは、SWF ファイルのルート表示オブジェクト用、 または(ActionScript を使用して描画されるビットマップではなく)読み込まれるビットマップ用として定義されています。 ---------------------------------------------------------------------------------------------------------------------------------------
とあるので ローディングバーのムービークリップの中にコードを書いても このムービークリップ(表示オブジェクト)が属するファイル(root)の読み込み情報は ムービークリップ内からthisで取得できるのです。

なので、このシンボルをコピペすれば、使い回しが出来るってわけ。

引用元はココ↓
http://www.flash-jp.com/modules/newbb/viewtopic.php?post_id=33538&topic_id=6612&forum=20

そういえば、全くAS3.0について触れてなかったので
AS2.0で多用しているTweenクラスの使い勝手がどうなのか試したので
記事を書いてみる。

サンプルを表示

ソースコードはこんな感じ。

import fl.transitions.Tween;
import fl.transitions.easing.*;

var myTween:Tween = new Tween(tweener_mc , "x" , Regular.easeOut , tweener_mc.x , tweener_mc.x + 400 , 1 , true);
myTween.stop();
btn0_btn.buttonMode = true;

for(i = 0; i < 8 ; i++){
    this["btn" + i + "_btn"].addEventListener(MouseEvent.CLICK, onClick);
    this["btn" + i + "_btn"].doubleClickEnabled = true;
    this["btn" + i + "_btn"].buttonMode = true;
    this["btn" + i + "_btn"].prm = i+1;
}

function onClick(Event:MouseEvent) {
    myTween.FPS = 4*Event.target.prm;
    myTween.start();
}

var myTween:Tween = new Tween(ターゲットのムービークリップ , "Tweenさせたいプロパティ" , イージングメソッド , 開始値 , 終了値 , 持続時間 , 持続時間を秒数にするか・フレーム数にするか);

AS2.0と同じように書けるみたいね。
ちょっと驚いたのが、FPSってプロパティがあること
やってみたら、ステージのフレームレートにかかわらず、独自のフレームレートで動かせるみたいね。

start();とかstop();とか、中々便利なメソッドが搭載されて
使い勝手は上がってそうね。
いちいち new Tween( ってやらなくても tween.prop = alpha;
って書き方が出来るから、メモリも節約出来る・・・?のかな?

ちなみに transitionsのパッケージには、ほかにもワイプとかピクセルディゾルブとかいうクラスがあって
切り替え効果とかをTweenクラスでいじれるみたいで、これは夢が広がりそうです。

プロフィール

HN.NoBody

NoBody

市ヶ谷のとあるオフィスでFlashクリエイターとして労役中。
なんとなくチーフ。

twitterでつぶやき中