すべてのアセットが埋め込まれているメインswfのロードの進行状況を表示するようにプリローダーを設定しようとしています。ビット101で説明されているファクトリクラスメソッドを見つけましたが、ロードの進行状況が表示されていないようです。swfは正常にロードされますが、bytesLoadedは常にbytesTotalに等しいため、プリローダーが呼び出されることはありません。
これは私が使用しているファクトリークラスです
package src
{
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;
import flash.utils.getDefinitionByName;
/**
* ...
* @author DefaultUser (Tools -> Custom Arguments...)
*/
public class Factory extends MovieClip
{
private var preloader:Preloader;
public function Factory()
{
stop();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
addEventListener(Event.ENTER_FRAME, enterFrame);
}
public function enterFrame(e:Event):void
{
trace(root.loaderInfo.bytesLoaded, root.loaderInfo.bytesTotal);
if (framesLoaded == totalFrames) {
removeEventListener(Event.ENTER_FRAME, enterFrame);
nextFrame();
init();
}
else {
var percent:Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal;
trace(percent);
}
}
private function init():void
{
var mainClass:Class = Class(getDefinitionByName("Main"));
if (mainClass) {
var mainApp:Object = new mainClass();
addChild(mainApp as DisplayObject);
mainApp.init();
}
}
}
}
enterFrameイベントで呼び出されたトレースは、bytesLoadedとbytesTotalが等しいことを示しています。
そして、これはswfがロードされるときに呼び出されるMainクラスです。
package
{
import flash.display.Sprite;
[Frame(factoryClass="src.Factory")]
public class Main extends Sprite
{
[Embed(source="images/FinalImg01.jpg")]
private var Image1:Class;
[Embed(source="images/FinalImg02.jpg")]
private var Image2:Class;
[Embed(source="images/FinalImg03.jpg")]
private var Image3:Class;
public function init():void
{
trace("loaded");
}
}
}
これにより、最初にFactoryクラスが正しく呼び出され、次にMainがインスタンス化されてinit()が呼び出されます。しかし、前述したように、すべてをすぐにロードしているように見えるため、プリロードは表示されません。
これは、画像の埋め込み方法に問題がありますか、それともローカルでテストしているためですか?
他の誰かがこれらの問題に遭遇しますか?
ありがとうリッチ