【问题标题】:ACTIVATE/DEACTIVATE events don't work for a mobile game app using starling frameworkACTIVATE/DEACTIVATE 事件不适用于使用 Starling 框架的移动游戏应用
【发布时间】:2018-11-18 21:15:09
【问题描述】:

所以我正在使用 Starling 框架开发一款手机游戏,我希望游戏在我点击手机上的主页/返回按钮时暂停,当然在返回游戏时恢复。我做了一些研究,并尝试了以下方法:

this.addEventListener(FlashEvent.DEACTIVATE, stopGame);
this.addEventListener(FlashEvent.ACTIVATE, continueGame);

private function continueGame(event:FlashEvent):void 
{
    ...
}
private function stopGame(event:FlashEvent):void 
{
    ...
}

我不得不添加一个名为 FlashEvent 的新类,它扩展了 flash.events.Event,因为我在同一个类中使用了 starling Event 和 flash Event,当我使用 flash.events.Event 时,我得到了这个错误:

Error: Access of undefined property flash

starling.events.Event 也是如此。

所以我使用上面的代码并在我的手机上进行了尝试,但是当我返回/home 时,游戏继续进行,音乐继续播放。

我的问题是:在空中移动应用中调度激活/停用事件的正确方法是什么?

【问题讨论】:

    标签: air game-development starling-framework


    【解决方案1】:

    在您的主要启动类中使用。 (请注意,在本例中,'app:Main' 是我调用 Starling 启动方法的类。

    请注意,您应该通过以下方式确定事件类: 椋鸟.events.Event.XXX flash.events.Event.XXX

    _mStarling.addEventListener(starling.events.Event.ROOT_CREATED, 
    function onRootCreated(event:Object, app:Main):void
    {
    
    _mStarling.removeEventListener(starling.events.Event.ROOT_CREATED, onRootCreated);
    
    app.start(assets);
    
    _mStarling.start();
    
    NativeApplication.nativeApplication.addEventListener(
    flash.events.Event.ACTIVATE, function (e:*):void { 
    
    _mStarling.start(); 
    
    try {
    //  optionally call some other methods
    } catch(e:Error) {
    
    }
    });
    
    NativeApplication.nativeApplication.addEventListener(
    flash.events.Event.DEACTIVATE, function (e:*):void { 
    
    try{
    //  optionally call some other methods before stopping
    } catch(e:Error) {
    
    }
    _mStarling.stop(); 
    }); 
    
    });
    

    【讨论】:

    • 您好,首先感谢您的回答,我现在唯一的问题是:_mStarling.stop();似乎什么也没做,我的意思是激活/停用确实有效,因为我可以使用 SoundMixer.soundTransform = new SoundTransform(0); 停止音乐在 deactive 函数内部,但游戏继续进行,障碍物继续移动,这是我不想要的。
    • 也许读懂了八哥停止功能的确切作用。您可能需要调用 juggler 来停止动画或补间。
    • 我的游戏中的所有动画,都来自一个名为 updateGame 的函数,它通过事件 Event.ENTER_FRAME 执行。就是这样。
    【解决方案2】:

    我的代码

    public function Main()
    {
      stage.addEventListener(flash.events.Event.DEACTIVATE, onDeactivate);
      stage.addEventListener(flash.events.Event.ACTIVATE, onActivate);
    }
    

    您设置了一个暂停的布尔值并在游戏循环的顶部检查它:

    if ( paused ) return;
    

    如果您有动画,则使用魔术师,如果您没有在魔术师上调用 advanceTime,则它会暂停。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      相关资源
      最近更新 更多