4

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

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

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

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

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

例子

SpellTower 处于正常状态

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

按两次主页按钮后的 SpellTower

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

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

4

3 回答 3

1

当您执行 board_group.alpha = 0 时,您只设置了一个变量,结果将仅在屏幕更新后生效。

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

于 2012-11-12T12:35:59.730 回答
1

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

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

电晕似乎有这些事件:

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

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

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

  • 当应用程序在暂停后恢复时发生“applicationResume”。在电话上,如果应用程序因电话呼叫而暂停,则会发生这种情况。在模拟器上,当模拟器在后台并且现在是前台应用程序时会发生这种情况。

所以我的猜测是你必须在电晕 API 之外实现它。

根据电晕文件,您可以在代表中实现它们:

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

该协议符合 UIApplicationDelegate 协议。如果实现了 Corona 的内部委托,它将调用您协议的方法。

请记住以下几点:

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

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

但这只是一个猜测。希望能帮助到你!

编辑:

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

于 2012-11-13T09:09:09.760 回答
1

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

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

于 2012-11-15T19:14:45.537 回答