2012-11-11 40 views
4

我正在構建一個文字遊戲,並且我想在應用程序暫停時隱藏董事會?Corona SDK如何在應用程序暫停時隱藏組?

代碼看起來不管天氣怎麼GIVS一個奇怪的行爲!!,

當我暫停了應用程序什麼都不會發生,但是當我恢復應用程序,則董事會將隱藏!

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

注意:您可能想知道如何知道掛起時應用程序的外觀? 答案是:按住主頁按鈕兩次。

例如

SpellTower處於正常狀態

http://cl.ly/image/0A0n0v1A2q0C/o

按home鍵兩次

http://cl.ly/image/2D0p3I3d3T3h/o

你可以看到他們是如何隱藏的字母,這是後SpellTower正是我想爲我的比賽做的事情,唯一的區別是我使用的是科倫SDK

回答

1

當您執行board_group.alpha = 0時,您只設置了一個變量,結果將僅在屏幕更新後生效。

但由於應用程序被暫停...它不會更新!所以,更改applicationSuspend上的任何圖形都不起作用。

+0

這是正確的。暫停時沒有更新屏幕更新。 – walter

+0

@speeder恐怕是這樣,謝謝你的回答 – ahmed

+0

謝謝Walter! (請注意ahmed:Walter是Corona的首席工程師,所以無論他對Corona說什麼,他都是對的:P) – speeder

1

我相信原因是因爲該應用程序不被視爲暫停。在正常客觀的c編程中,這意味着當用戶雙擊主頁按鈕時調用應用程序將調用applicationWillResignActive。所以你想要做的是爲這部分添加代碼。

這裏是事件的流程: http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

電暈似乎有這些事件:

  • 當應用程序啓動並執行在main.lua所有代碼

    「applicationStart」發生。

  • 「applicationExit」在用戶退出應用程序時發生。

  • 當設備需要掛起應用程序時(例如在電話呼叫期間或手機從不活動狀態進入睡眠狀態 )時,會發生「applicationSuspend」。在模擬器中,這對應於在後臺運行的模擬器 。在暫停期間,暫停時不會發生任何事件(甚至不包括 enterFrame事件),因此如果 的代碼取決於時間,則應該將暫停的應用程序的時間記錄爲 。

  • 當應用程序在掛起後恢復時,會發生「applicationResume」。在電話中,如果應用程序因電話被暫停 ,就會發生這種情況。在模擬器上,當模擬器在後臺並且現在是前臺應用程序時發生這種情況。

所以我的猜測是你必須在corona API之外實現它。

根據電暈文件,你可以在委託實現它們:

你可以通過你的CoronaDelegate協議的執行 攔截UIApplicationDelegate事件。

該協議符合UIApplicationDelegate協議。如果實施了 ,Corona的 內部代表將調用您的協議的方法。

請記住以下幾點:

方法,蘋果已經過時將被忽略。 在大多數情況下,您的類的版本將在Corona的相應版本的UIApplicationDelegate方法之後調用。有一種情況會在之前調用您的版本。 在應用程序即將暫停或轉到後臺的情況下,您的方法將在Corona的版本(例如, applicationWillResignActive:和applicationDidEnterBackground :.

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

但是,這只是一個猜測。希望能幫助到你!

編輯:

我在想,是你可以做的非常簡單的在外面捕捉到它並呈現出「暫停」畫面,然後就躲它,當應用程序進入前景。

+0

爲了闡明在applicationWillResignActive:delegate方法中發送的「applicationSuspend」事件,以及「applicationResume 「事件在applicationDidBecomeActive:delegate方法調用中發送。 – walter

+0

@Luis奧斯卡感謝您的回答,雖然問題沒有解決,但你的答案有很多很好的信息,再次感謝:) – ahmed

+0

@walter:謝謝澄清,因爲這是在引擎蓋下的情況,爲什麼它無法在暫停之前更改應用程序中的任何-visual-元素,例如顯示暫停屏幕 - 因爲在本地IOS開發中,您可以做到這一點。你打算解決這個問題嗎?我非常感謝你的關懷 – ahmed

1

所以,如果你不能這樣做(現在),另一個選擇是當應用程序即將終止時保存應用程序狀態,然後在你的plist文件中設置UIApplicationExitsOnSuspend = true。這將導致應用程序退出而不是掛起,這將避免任何屏幕截圖,有效地「隱藏」電路板等。失敗的是,應用程序將不得不在讀取會話狀態時再次啓動......這只是有用的如果你的應用程序可以被設計爲在不失去你的狀態的情況下實際退出,並且說實話,有點極端。也就是說,這可能是有效地做你想做的事情的唯一方法。

其他想法是看看你是否可以在屏幕上添加一個大的黑色圖層,即使應用程序正在掛起;也許這會以某種方式通過本地設置setNeedsDisplay觸發內部屏幕更新。另外,不要修改alpha,而是可以暫時刪除所有圖層,看看是否具有相似的效果。