2

ActionScript でゲームを作成しています。actionscript のオブジェクト指向プログラミングで問題が発生しています。ゲームのライブラリ コンポーネントをホストする game_fla があります。問題を引き起こしているのは、スプラッシュ ムービー クリップです。このムービー クリップ内には、アニメーション化してロゴと 2 つのボタンをロードするレイヤーがいくつかあります。ドキュメント クラス game.as には、次のコードがあります。

package{
import flash.display.MovieClip;
public class the_game extends MovieClip {
    public var splash_screen:splash;
    public var play_screen:the_game_itself;
    public var how_to_play_screen:how_to_play;



    public function the_game() {
        show_splash();
    }

    public function show_splash() {
        splash_screen = new splash(this);
        addChild(splash_screen);
    }

    public function play_the_game() {
        play_screen = new the_game_itself(this,level);
        remove_splash();
        addChild(play_screen);
    }
etc..

これは明らかに、スプラッシュ コンポーネントに関する情報を保持する splash.as ファイルを指します。これは、splash.as のコードです。

package {
    import flash.display.MovieClip;
    import flash.display.SimpleButton;
    import flash.events.MouseEvent;
    public class splash extends MovieClip {
    public var main_class:the_game;
    public function splash(passed_class:the_game) {
        main_class = passed_class;
        play_btn.addEventListener(MouseEvent.CLICK, playGame);
        howToPlay_btn.addEventListener(MouseEvent.CLICK, howToPlay);

    }

    public function playGame(event:MouseEvent):void{
        main_class.play_the_game();
    }

    public function howToPlay(event:MouseEvent):void{
        main_class.how_to_play();
    }

}

}

私の要点に!私が抱えている問題は、game.fla ファイルを実行すると、「1120: 未定義のプロパティ play_btn および howToPlay_btn へのアクセス」という、splash.as ファイルのコンパイラ エラーが発生することです。前述のようなこれらのボタンは、ムービー クリップの splash_mc 内にあります。(すべてにインスタンス名などがあります..) どこが間違っているのかわかりませんか? ちなみに、私は元々、ムービー クリップではなくスプライトを使用した as ファイルを持っていましたが、どちらも機能しません。

ヘルプ?お願いします?誰?

4

1 に答える 1

0

人生のように、子供が親に何をすべきかを教えさせるのは悪いOOPです。イベントを開始するだけで、親は必要に応じて反応できます。それ以外の場合は、依存関係を作成します。

あなたはこのようなことをします:

//in the parent
public function show_splash() {
        splash_screen = new splash();//get rid of this, remember to delete from main constructor
        splash_screen.addEventListener("PLAY_GAME", play_the_game);//add listener
        addChild(splash_screen);
    }


//in the child you just dispatch the event when you need it
public function playGame(event:MouseEvent):void{
        dispatchEvent(new Event("PLAY_GAME"));
    }

それがうまくいくとき、あなたは同じことをしますhow_to_play

フレームが必要な場合にのみMovieClipsを使用し、それ以外の場合はスプライトを使用します。また、親を引数として渡すことができない場合もありますが、それをaとしてDisplayObjectContainer渡すか、セッターを与える方がよい場合もあります。

于 2013-03-07T22:43:42.980 に答える