1

ドア/ボタンを作成し、クラスとして追加しました。それをクリックすると、アクションスクリプトのメインページで実行する関数を通知するイベントがディスパッチされます。

package  {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class Door extends MovieClip {

        var direct:String;
        var doorId:int;
        var dispatcher = new EventDispatcher();

        public function Door()  {
            this.addEventListener(MouseEvent.CLICK, changeRoom)
            this.buttonMode = true;
        }

        function changeRoom(e:MouseEvent):void{
            trace("door click")
            dispatcher.dispatchEvent( new Event("doorClick") );
        }
    }
}

メインページはこんな感じ

var doorTop = new Door();
doorTop.addEventListener("doorClick",goToRoom);
//should i be doing stage.addEventListener("doorClick",goToRoom);
function goToRoom(e:Event):void
{
  trace("i went here")
} 

私は何を間違っていますか?十分に簡単に思えます

4

1 に答える 1

4

からイベントをディスパッチするのではなく、内doorTopからディスパッチしています。dispatcherdoorTop

Door拡張MovieClipする拡張しEventDispatcherます。EventDispatcher を作成する必要はありませんDoor。クラスはすでに 1 つです。

これを行うだけです:

    function changeRoom(e:MouseEvent):void{
        trace("door click")
        this.dispatchEvent( new Event("doorClick") );
    }

これにより、オブジェクトからディスパッチされDoorます。

さらに、クラスを使用している場合、クラスの最上位スコープ内で宣言されたすべてのオブジェクト (関数を含む) には、アクセス修飾子 (public、private、internal、または protected) を含める必要があります。宣言するだけではいけません。宣言function changeRoomする必要がありますpublic function changeRoom。各変数と同じです。

于 2013-10-09T21:02:22.693 に答える