0

こんにちは、Starling/ActionScript 3 で少し設計上の問題があります。

やりたいことはシンプル

 dispatchEvent( new flash.events.Event("CloseApp",true)); //send closing bubble events

Main.asに次のメソッドがあります(メインはflash.display.Spriteを拡張します)

 public Main():void //constructor
 {
     addEventListener( "CloseApp" , onCloseApp);
     _starling = new Starling(Game, stage); //everythings work ok
     _starling.start(); //nice 3d stuff and interactive menu ok.
 }

 //closing event handling: close the APP
 public function onCloseApp( e:flash.events.Event): void
 {
     NativeApplication.nativeApplication.exit();
 }

他のすべてのクラスがイベントを正しくキャッチしている間、イベントを「メイン」に送信する方法がないようです。基本的に、私のアプリケーションで機能しないのは「終了」ボタンだけです。

4

4 に答える 4

3

イベントは Game インスタンスまでしか移動しません。_starling.root であるべきだと思います

したがって、私が見たものに基づいて、_starling.root.addEventListener("CloseApp", onCloseApp); を呼び出す必要があります。

ところで、ボタンが Starling 表示オブジェクトの場合、フラッシュ イベントではなく、Starling イベントを送出する必要があります。新しく作成したものを使用できますdispatchEventWith('CloseApp')

最後に public function onCloseApp( e:Object):void、イベント クラスの衝突を防ぐために、コールバック シグネチャを に変更することをお勧めします。

[編集] これが私があなたのケースを処理する方法です。starling >1.2 を使用している場合、動作するはずです:

  1. Main を次のように変更します。

    public static const EVT_CLOSEAPP:String = 'close app';
    public Main():void //constructor
    {
      _starling = new Starling(Game, stage); //everythings work ok
      _starling.start(); //nice 3d stuff and interactive menu ok.
      _starling.addEventListener(EVT_CLOSEAPP , onCloseApp);
    }
    //closing event handling: close the APP
    public function onCloseApp( e:Object): void
    {
      NativeApplication.nativeApplication.exit();
    }
    
  2. 次に、閉じるボタンを作成しているクラスで

    //... i assume your button is in a variable btn
    btn.addEventListener(Event:TRIGGER, onCloseBtn);//this is starling.event.Event
    //...
    protected function onCloseBtn(_e:Event)
    {
      Starling.current.dispatchEventWith(Main.EVT_CLOSEAPP);
    }
    
于 2013-01-22T23:09:48.327 に答える
1

これは、Starlingには独自のバージョンのイベント ディスパッチがあるためです。

動作する必要があるのは

  1. starling.events.Eventa の代わりに a をディスパッチするflash.events.Event
  2. _starlingまたは_starling.stageオブジェクトにリスナーを直接追加します。
于 2013-01-21T15:18:14.327 に答える
1

私はスターリングの有効期限切れの開発者ではありませんが、同様の問題があり、静的変数を追加してそこからメソッドを呼び出すことで解決しました。あなたの場合、次のようなものを使用できます:

Game クラスに次を追加します: public static var mainDoc: MovieClip;

メインメソッドに次を追加します: Game.mainDoc = this;

次に、イベントを発生させる代わりに Game クラスでメソッド mainDoc.onCloseApp() を呼び出すことができます

Antoine Lassauzay のように _starling.addEventListener または _starling.stage.addEventListener を試すこともできます

于 2013-01-21T16:17:18.940 に答える