0

私はIDEと戦い、一日中読んで、AS3ではlibシンボルのエクスポートされたクラス名が重要であることを学びました。

hello.flaがあります。その中で、文字列('hello')を使用して単純なテキストフィールドを作成しました-それをシンボル(movieclip)に変換し、次のことを行いました。

  • クラス名を「こんにちは」にしました。
  • ASのエクスポートがチェックされています
  • 最初のフレームでのエクスポートがチェックされます。

それをすべてやったら、ステージ上でインスタンスを削除しました。後でいくつかの機能を追加するかもしれないと思ったので、実際にはHello.asクラスも作成しました。これは、MovieClipを拡張し、デフォルトのpkg *にあり、fla全体が正常に作成されます。

package 
{
    import flash.display.MovieClip;

    public class Hello extends MovieClip
    {
        public function Hello()
        {
        }
    }
}

これで、同じフォルダーであるmain.flaがドキュメントクラスMainを使用し、Main.asは次のようになります。

private var h:MovieClip;
//...
h = new Hello();
this.addChild(h); //no joy

**これが機能するまで、フォルダには何もありません。すべてのファイルはルートフォルダにあります。*

4

3 に答える 3

1

ソリューション

ライブラリ シンボルが Hello.fla などの .fla 内にあるとします。

package 
{
    import flash.display.MovieClip;
    import flash.text.TextField;

    /**
     * empty mc (blank stage) with a single library symbol containing whatever the hell you want (eg a shape). with settings:
     * class = Hello <=== this refers to a specific library symbol, not the entire Hello.fla and whatever else is on the stage when you build it.
     * export for AS : checked
     * export for runtime sharing (as Hello.swf) : checked <==== This was the step I'd missed
     * export in 1st frame : checked
     */
    public class Hello extends MovieClip
    {
        public function Hello()
        {
        }
    }
}

主なタイムライン/ドキュメント クラス:

package 
{
    import flash.display.Loader;
    import flash.display.MovieClip;
    import flash.net.URLRequest;
    import flash.events.Event;
    import Hello;

    /**
     * this is the document class.
     */
    public class Main extends MovieClip
    {
        public function Main()
        {
            this.h = new Hello();
            this.l= new Loader();
            this.l.load( new URLRequest("Hello.swf") );
            this.l.contentLoaderInfo.addEventListener(Event.COMPLETE, this.test);
        }

        public function test(e:Event)
        {
            this.h = new Hello();
            h.x = 100;
            h.y = 100;
            this.addChild(this.h); //shows up on stage. Finally!
        }

        private var h:MovieClip;
        private var l:Loader;
    }

}

AS3 を初めて使用する私のような他の初心者に役立つことを願っています。

于 2009-11-20T00:46:58.633 に答える
0

this.addChild(h) の代わりに、root.addChild(h) を試してみるとうまくいきますか?

編集: _root -> AS3 のルート

于 2009-11-19T21:43:32.103 に答える
0

ステージに追加する必要があります。

stage.addChild(h);
于 2009-11-19T21:44:58.547 に答える