*ドキュメントクラス超解説 [#ebbef1f2]
**某beinteractiveさんによる超解説 [#x7b6d971]
ドキュメントクラスが実行されるのは、1フレーム目がロードされきった時なので、&br;
これよりも前に色々書き出されてるといつまでたってもプリローダとかが実行されない。&br;
&br;
#ref("sample1.png",left,wrap)
&br;
「いろいろ」の部分を 2フレーム目に持っていき、ドキュメントクラスをすぐ実行できるようにしたい。&br;
こんな感じに2フレーム目にいろいろMCなど配置する。&br;
&br;
#ref("sample2.png",left,wrap)
&br;
ドキュメントクラスはどうするか?
&br;
#geshi(ActionScript){{
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.utils.getDefinitionByName;
public class DocumentRoot extends MovieClip
{
public function DocumentRoot()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.LEFT;
addEventListener(Event.ENTER_FRAME, _initialHandler);
}
private function _initialHandler(e:Event):void
{
//3フレーム目まで到達すればロードが完了
if (currentFrame == 3) {
removeEventListener(Event.ENTER_FRAME, _initialHandler);
stop();
initialize();
} else {
var percent:Number = (loaderInfo.bytesLoaded / loaderInfo.bytesTotal) * 100;
trace("Loading... " + percent + "%");
}
}
protected function initialize():void
{
//var s:Sample1 = new Sample1();
var sample1:Class = getDefinitionByName('Sample1') as Class;
var s:Sprite = new sample1();
}
}
}
}}
基本的に、「あるクラスが使うクラス」は、そのクラスが実行される前に全てロードされてる必要がある。&br;
ということは、その「あるクラス」よりも、確実に前にロードされるように SWF に配置する必要がある。&br;
&br;
DocumentRoot の中で var s: Sample1 = new Sample1() としてしまうと、&br;
DocumentRoot クラスが「使うクラス」である「Sample1」クラスは、DocumentRoot クラスよりも前に読み込まなきゃいけない。&br;
つまり、Sample1 が読み込み終わるまで DocumentRoot が実行されないので、意味が無い。&br;
こんな図のような感じになってしまう。&br;
&br;
#ref("sample3.png",left,wrap)
&br;
で、ここで出てくるのが getDefinitionByName &br;
クラスは取得するけど、「このクラスはこのクラスが必要です」とまでは主張しない。&br;
するとこんな図のような感じになる。&br;
&br;
#ref("sample4.png",left,wrap)
&br;
となって、見事 2フレーム目に埋め込まれる。&br;
&br;
#ref("sample5.png",left,wrap)
&br;
そうすると、1フレーム目では Sample1 クラスはロードされていないんだけど、&br;
3フレーム目になればきちんとロードされていて、getDefinitionByName で取得できる、という状況が出来上がる。&br;
つまり、getDefinitionByName を使うのは、確実に1フレーム目ではなく2フレーム目に埋め込むため。&br;
**サンプル [#had847ef]
-flaファイル:[[DocumentClass.zip:http://sample.minaco.net/flash/documentclass/DocumentClass.zip]]
-flaファイル:[[DocumentClass.zip:http://wiki.minaco.net/data/flash/documentclass/DocumentClass.zip]]
**参考 [#n1af68ec]
-[[Flash/ドキュメントクラス>Flash/ドキュメントクラス]]
-[[Flash/関数/getDefinitionByName>Flash/関数/getDefinitionByName]]
&br;
*Comment [#t26a3b4e]
#comment_nospam
&br;
#counter
IP:121.2.158.234 TIME:"2009-06-09 (火) 21:17:18" REFERER:"http://wiki.minaco.net/index.php?cmd=edit&page=Flash%2F%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88%E3%82%AF%E3%83%A9%E3%82%B9%E8%B6%85%E8%A7%A3%E8%AA%AC" USER_AGENT:"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10"