0

Adobe Flash Professional CS6、AS3 の使用ナビゲーションメニューを設定しようとして
いる情報をさらに提供する必要がある場合は、「MovieClipでMain.asファイルの関数を呼び出すにはどうすればよいですか」と質問してください。
ステージから?」フレームは1つだけで(これ以上は必要ありません)、必要に応じてASを使用してさまざまなメニュー画面(MovieClipsのみ)がステージに追加されます。Main.asファイルに_About()というパブリック関数があり、MovieClip「MenuScreen」からはアクセスできません。_Menu()でeventListenersを使用してMovieClipをステージに追加することはできますが、mcがコールバックして画面を変更すると、次のエラーが発生します。

TypeError:エラー#1034:タイプ強制に失敗しました:flash.display::Stage@51ca0d1をflash.display.MovieClipに変換できません。MenuScreen / clickAbout()[MenuScreen :: frame1:32]で

Frame1:32のコードは次のとおりです。

MovieClip(parent)._About();

Main.asの51行目は次のとおりです。

public function _About():void
{
trace("The About Function");
}

以下に、ほとんどの脂肪がトリミングされたMain.asについて詳しく説明します。

package 
{
import stuff

public class Main extends MovieClip
{
    //Load the screen MCs onto the stage
    public var _menu:MenuScreen = new MenuScreen();
    public var _about:AboutScreen = new AboutScreen();
    public var isMenu:Boolean = true;
    public var isAbout:Boolean = false;

    public function Main()
    {
        _Menu();            
    }

    public function _Menu():void
    {
        isMenu = true;
        stage.addChild(_menu);
    }

    public function _About():void
    {
        trace("The About Function");
    }
4

3 に答える 3

1

問題の簡単な解決策は、ステージではなくメニュー項目を追加することです。代わりに、それらをメインクラスに追加してください。このように、アイテムの親は代わりにmain.asになります

ただし、親をメインにキャストする必要があります

Main(parent)._About();

また、あまり良くありません。アイテムは、その背後にあるものであってはなりません。

最善の方法は、さまざまな画面からイベントをディスパッチすることです。手段:画面オブジェクトを作成し、画面の変更が発生したときにカスタムイベントをディスパッチします。

dispatchEvent(new Event("showAbout"));

メインクラスでは、次のようなイベントを処理します。

public function Main()
{
    _Menu(); 
    _menu = new MenuScreen();
    _menu.addEventHandler("showAbout", showAboutHandler);
}

public function showAboutHanlder(e:Event):void
{
     _About();
}

さらに優れているのは、画面識別子をパラメータとして持つカスタムイベントです。このように、ハンドラーを1つ追加し、ハンドラーコードで表示する画面を決定するだけです。

イベント処理が適切に行われると、メニュー項目はメインに直接接続されなくなります。また、メインは画面クラスに関する詳細情報を必要としません。

于 2012-05-15T06:27:56.987 に答える
0

の完全なクラスを確認することは役立ちますMenuScreenが、おそらく何が起こっているのかを次に示します。

でインスタンス化してpublic var _menu:MenuScreen = new MenuScreen();おり、これが発生すると、ステージにMovieClip(parent)._About()追加する前に呼び出しが行われる可能性があります。これが発生してエラーが発生した場合、まだ親がありません。MenuScreenstage.addChild(_menu);

これを回避する2つの方法:

  • クラスMenuScreenを参照するのコンストラクターに必須パラメーターを追加します。のコンストラクターはで始まり、クラスからインスタンス化するときに、Mainのコンストラクターで$ main._About()を使用できるようになります。MenuScreenpublic function MenuScreen($main:Main){MenuScreenMainpublic var _menu:MenuScreen = new MenuScreen(this);MenuScreen
  • のコンストラクターにMenuScreen、ステージに追加されたことを確認するリスナーを追加します addEventListener(Event.ADDED_TO_STAGE, addedStage)。この関数addedStageでは、親またはステージを適切に呼び出すことができ、MovieClip(parent)._About()おそらくここで機能します。
于 2012-05-15T05:25:06.113 に答える
0

静的プロパティを設定します:

public static var instance:Main;
public function Main(){
        instance = this;
        _Menu();            
    }

そしてどこからでもあなたはコードを使うことができます:

Main.instance._About();
于 2012-05-15T05:39:11.750 に答える