【问题标题】:Is there an inbuilt way to pause an AIR Desktop App?是否有暂停 AIR 桌面应用程序的内置方法?
【发布时间】:2014-05-06 15:02:29
【问题描述】:

我有一个 AIR 桌面游戏,它有背景音乐并且在主菜单中重复动画。是否有内置的可能性告诉 AIR 容器,当窗口失去焦点时(例如通过 alt+tab 或按下 windows 键),AIR 容器正在暂停其容器的内容(暂停音乐和动画/frameHandlers等等)?

还是只能将所有内容一一停止,重新获得焦点时,将所有内容一一开始?

【问题讨论】:

  • 后者。您必须在舞台上收听Event.ACTIVATEEvent.DEACTIVATENativeApplication 并一一停止所有内容,然后再重新启动它们。
  • 说真的?! AIR 容器中不应该有某种功能吗? T_T 不管怎样,谢谢你的帮助。
  • Adobe 不会自动执行任何操作。 Flash/AIR 并不意味着是一个简单的 SDK,有一堆助手和一切。它旨在成为一种让开发人员绝对控制的语言。不过想想看,他们会如何暂停呢?多久有人想要一个没有声音或任何东西的绝对静态屏幕?对用户来说,应用程序会显示为冻结(从技术上讲,确实如此)。此外,它不会与系统交互(即在 OS X 中滚动非活动窗口)正确交互,并且实际上会违背大多数设计范例。

标签: actionscript-3 air desktop-application suspend


【解决方案1】:

@JoshJanusch 说的是真的——你必须自己管理它,尽管设置 stage.frameRate 可能对你的情况有所帮助。

我见过的大多数激活/停用管理器都会执行以下操作:

  • stage.frameRate 设置为 0.01(减慢动画和 ENTER_FRAME 事件侦听器,尤其是在移动设备上节省 CPU/电池)
  • 停止声音(如果您通过某个 SoundManager 类播放所有声音,这可能很容易)
  • 管理您对 setIntervalsetTimeout 的使用,因为它们是持续触发的计时器
  • 考虑暂停任何其他异步活动(如网络请求或后台Workers

请随时在 cmets 中对此列表提出建议。

【讨论】:

  • 哦,这很方便,非常感谢。将帧率设置为 0.01 是否有原因?
  • 这是每个the docs =) 的最低有效值
  • 这是一个很好的答案,尽管将帧速率设置为 0.01 仍然会导致动画移动(应该每秒移动 1 个像素的动画将每 100 秒移动 1 个像素, 例如)。你可能想要处理它。如果这是一个游戏,你应该有一个暂停菜单,当Event.DEACTIVATE 触发时你可以使用它。
  • 对 - 游戏框架应该有暂停机制(或自动尊重停用事件,如Starling's Juggler class),最好使用支持暂停的(声音、动画、计时器等)框架. frameRate 技巧可能会使不使用这些的项目受益。
猜你喜欢
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 2013-07-18
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多