• 締切済み

AS3でプリローダー

ActionScript3.0でプリローダーを作成したいのですが、 作り方が全くと言っていいほど分かりません。。 一気に100%までファイルを読み込んでしまっても、100%まで等速で1パーセントずつ表示しながら動作するプリローダーの 作り方を教えて頂けないでしょうか。 ソースを提示して頂けるとありがたいです。 どうか、よろしくお願い致します。

みんなの回答

  • chika_008
  • ベストアンサー率80% (20/25)
回答No.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); }

Sun_Mon
質問者

補足

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

  • chika_008
  • ベストアンサー率80% (20/25)
回答No.1

下記スクリプトをアクションフレームの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); }

Sun_Mon
質問者

補足

ご回答ありがとうございます。 お手数おかけして申し訳ないのですが、 ステージ上に何を設置すればいいのでしょうか? よろしくお願いします。

関連するQ&A