ActionScript3.0でプリローダーを作成したいのですが、
作り方が全くと言っていいほど分かりません。。

一気に100%までファイルを読み込んでしまっても、100%まで等速で1パーセントずつ表示しながら動作するプリローダーの
作り方を教えて頂けないでしょうか。

ソースを提示して頂けるとありがたいです。

どうか、よろしくお願い致します。

A 回答 (2件)

すみません。

。。
すごく勘違いをしておりました。。

プリローダーですよね。
ただ%を表示するというのではなくて
バーのようなものを表示ですよね。。

再度スクリプトを書いてみました。
どうでしょうか?

ただ縦2px横1pxのSpriteをaddChildしてあげて
それを読み込んだ%でのばしてあげています。
そこの記述が
sp.width = (stage.stageWidth/100) * loadNum;
ここになります。読み込みが終わったら最後の
/*ここに次の処理を記述☆*/の部分で2フレームにいくなり
関数を記述するなりしてくださいませ。
またなにかありましたらお聞きください。

/*パーセンテージを表示するスプライト*/
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0x000000);
sp.graphics.drawRect(0, stage.stageHeight/2, 1, 2);
sp.graphics.endFill();
addChild(sp);

/*ローダーインスタンスを作成*/
var loader:Loader = new Loader();
/*ロードされた定数*/
var loadNum:int = 0;
var loadedNum:int = 0;

/*イベントのリスナー登録*/
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressEvent);
loader.contentLoaderInfo.addEventListener(Event.OPEN, loadStart);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComp);

/*URLRequestでurlを指定してロード*/
loader.load(new URLRequest("scene.swf"));

/*ロードがスタートする時に呼び出される関数*/
function loadStart(e:Event):void {
addEventListener(Event.ENTER_FRAME, checkLoader);
}

/*エンターフレーム*/
function checkLoader(e:Event):void {

/*読み込まれた%まで数値を追加*/
if(loadNum < loadedNum) {
loadNum ++;
}

/*ローダーをのばす*/
sp.width = (stage.stageWidth/100) * loadNum;

/*もしloadNumが100の場合はエンターフレームを削除*/
if(loadNum >= 100){
removeEventListener(Event.ENTER_FRAME, checkLoader);
trace("100%");
}

}

/*ロードされるたびに呼び出される関数*/
function progressEvent(e:ProgressEvent):void {
loadedNum = e.bytesLoaded / e.bytesTotal * 100;
trace(loadedNum);

}

/*ロードが読み込まれたらリスナーを削除*/
function loadComp(e:Event):void {
/*リスナー削除*/
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressEvent);
loader.contentLoaderInfo.removeEventListener(Event.OPEN, loadStart);
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComp);

/*ローダー削除*/
removeChild(sp);

/*ここに次の処理を記述☆*/
gotoAndStop(2);

}

この回答への補足

すいません。。

ステージ上になにを設置すればいいのか分かりません。
簡単で結構ですので、スクリプト以外の設定や作成法を
教えて頂けると有難いです。

どうか、よろしくお願いします。

補足日時:2009/05/16 04:14
    • good
    • 0

下記スクリプトをアクションフレームの1フレーム目に


書いてみてください。またopening.swfはロードしたいものを
いれてください。


/*パーセンテージを表示するテキストフィールド*/
var textfield:TextField = new TextField();
textfield.border = true;
addChild(textfield);

/*ローダーインスタンスを作成*/
var loader:Loader = new Loader();
/*ロードされた定数*/
var loadNum:int = 0;
var loadedNum:int = 0;

/*イベントのリスナー登録*/
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressEvent);
loader.contentLoaderInfo.addEventListener(Event.OPEN, loadStart);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComp);

/*URLRequestでurlを指定してロード*/
loader.load(new URLRequest("opening.swf"));

/*ローダーをadd*/
addChild(loader);

/*ロードがスタートする時に呼び出される関数*/
function loadStart(e:Event):void {
addEventListener(Event.ENTER_FRAME, checkLoader);
}

/*エンターフレーム*/
function checkLoader(e:Event):void {

/*読み込まれた%まで数値を追加*/
if(loadNum < loadedNum) {
loadNum ++;
}

/*textfieldに数値を代入*/
textfield.text = loadNum.toString() + "%";

/*もしloadNumが100の場合はエンターフレームを削除*/
if(loadNum >= 100){
removeEventListener(Event.ENTER_FRAME, checkLoader);
textfield.text = "100%";
}

}

/*ロードされるたびに呼び出される関数*/
function progressEvent(e:ProgressEvent):void {

loadedNum = e.bytesLoaded / e.bytesTotal * 100;
trace(loadedNum);

}

/*ロードが読み込まれたらリスナーを削除*/
function loadComp(e:Event):void {
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, progressEvent);
loader.contentLoaderInfo.removeEventListener(Event.OPEN, loadStart);
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComp);
}

この回答への補足

ご回答ありがとうございます。

お手数おかけして申し訳ないのですが、
ステージ上に何を設置すればいいのでしょうか?

よろしくお願いします。

補足日時:2009/05/15 01:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング