【问题标题】:In Corona SDK How to hide a group if application suspended?在 Corona SDK 中,如果应用程序暂停,如何隐藏组?
【发布时间】:2012-11-11 01:55:39
【问题描述】:

我正在构建一个文字游戏,我想在应用程序暂停时隐藏板子?

代码看起来不错,但它给出了一个奇怪的行为!!,

当我暂停应用程序时,什么都不会发生,但是当我恢复应用程序时,董事会将隐藏!

local onSystem = function( event )
    if event.type == "applicationSuspend" then
       print("suspend")
       board_group.alpha = 0
    end
end
Runtime:addEventListener( "system", onSystem )

注意:您可能想知道我如何知道应用程序在挂起时的外观? 答案是:按两次 Home 键。

例子

魔法塔正常

https://dzwonsemrish7.cloudfront.net/items/430k0c0b0y0b413d0b42/Image%202012.11.12%208:08:24%20AM.png?v=4822f549

按两次home键后的SpellTower

https://dzwonsemrish7.cloudfront.net/items/280a1y0r2U3W321y1B2z/Image%202012.11.12%208:08:31%20AM.png?v=09c37567

你可以看到他们是如何隐藏字母的,这正是我想要为我的游戏做的,唯一的区别是我使用的是 Corona SDK

【问题讨论】:

    标签: iphone coronasdk


    【解决方案1】:

    board_group.alpha = 0 时只设置了一个变量,结果会在屏幕更新后生效。

    但由于应用程序被暂停......它不会更新!因此,更改 applicationSuspend 上的任何图形都不起作用。

    【讨论】:

    • 没错。暂停时没有更新屏幕更新。
    • 谢谢沃尔特! (请注意 ahmed:Walter 是 Corona 首席工程师,所以无论他对 Corona 说什么,他都是对的:P)
    【解决方案2】:

    我相信原因是因为应用程序没有被视为暂停。在普通的objective c 编程中,这意味着当用户双击主页按钮时会调用applicationWillResignActive。因此,您要做的是为此部分添加该代码。

    以下是事件流: http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

    Corona 似乎有这些事件:

    • “applicationStart”发生在应用程序启动并且所有代码 在 main.lua 中被执行。

    • “applicationExit”发生在用户退出应用程序时。

    • “applicationSuspend”发生在设备需要暂停应用程序时,例如在通话期间或手机进入睡眠状态时 从不活动。在模拟器中,这个对应于模拟器 在后台运行。在暂停期间,没有任何事件(甚至 enterFrame 事件)在挂起时发送到应用程序,所以如果 你有依赖于时间的代码,你应该考虑时间 因应用程序暂停而丢失。

    • “applicationResume”发生在应用程序在暂停后恢复时。在电话上,如果应用程序被暂停,就会出现这种情况 因为一个电话。在模拟器上,当模拟器在后台,现在是前台应用程序时,就会发生这种情况。

    所以我猜你必须在 Corona API 之外实现它。

    根据 corona 文档,您可以在委托中实现它们:

    您可以通过您的实现拦截 UIApplicationDelegate 事件 CoronaDelegate 协议。

    此协议符合 UIApplicationDelegate 协议。电晕的 如果是,内部委托将调用您的协议的方法 实施。

    请记住以下几点:

    Apple 已弃用的方法将被忽略。 在大多数情况下,您的类的版本将在 Corona 的 UIApplicationDelegate 方法的相应版本之后被调用。在一种情况下,您的版本会在之前被调用。 在应用程序即将暂停或进入后台的情况下,您的方法将在 Corona 的版本之前调用,例如 applicationWillResignActive: 和 applicationDidEnterBackground:.

    http://docs.coronalabs.com/native/enterprise/ios/CoronaDelegate.html

    但这只是猜测。希望对您有所帮助!

    编辑:

    我在想,您可以做的非常简单的事情是在外面捕捉它并显示一个“暂停”屏幕,然后在应用程序进入前台时将其隐藏。

    【讨论】:

    • 澄清一下,“applicationSuspend”事件在 applicationWillResignActive: 委托方法上发送,“applicationResume”事件在 applicationDidBecomeActive: 委托方法调用上发送。
    • @Luis Oscar 感谢您的回答,虽然问题没有解决,但您的回答有很多很好的信息,再次感谢:)
    • @walter :感谢您的澄清,因为这是引擎盖下的情况,所以为什么在暂停之前无法更改应用程序中的任何 -visual- 元素,例如 - 显示暂停屏幕 - 因为在原生 IOS 开发中,您可以做到这一点。你打算解决这个问题吗?非常感谢您的关心
    • @ahmed 我刚刚在电晕网站上检查了您的请求,根据他们的回答,它似乎没有实现。因此,您唯一的选择似乎是直接在本机 iOS 编码上实现它(仍然应该非常简单)。抱歉……
    【解决方案3】:

    因此,如果您不能这样做(目前),另一种选择是在应用程序即将终止时保存应用程序状态,然后在您的 plist 文件中设置 UIApplicationExitsOnSuspend = true。这将导致应用程序退出而不是暂停,这将避免任何屏幕截图,有效地“隐藏”板等。失败是,应用程序在再次启动时必须读取会话状态......这只是有用的如果您的应用程序可以设计为在不丢失状态的情况下实际退出,并且老实说,有点极端。也就是说,这可能是有效地做你想做的事情的唯一方法。

    其他想法是看看您是否可以在屏幕上添加一个大的黑色层,即使应用程序处于挂起状态;也许这会通过本机设置 setNeedsDisplay 以某种方式触发内部屏幕更新。此外,您可以考虑暂时移除所有图层,而不是修改 alpha,看看是否有类似的效果。

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      相关资源
      最近更新 更多