4

単語ゲームを作っているのですが、アプリが一時停止したときにボードを非表示にしたいのですが?

コードは問題ないように見えますが、奇妙な動作をします!!、

アプリを一時停止すると何も起こりませんが、アプリケーションを再開するとボードが非表示になります!!

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

注: サスペンドされたときにアプリケーションがどのように見えるか、どうすればわかるのでしょうか? 答えは、ホームボタンを 2 回押すことです。

通常状態のスペルタワー

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

ホームボタンを2回押した後のSpellTower

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

彼らがどのように文字を隠しているかを見ることができます。これはまさに私が自分のゲームでやりたいことです。唯一の違いは、Corona SDK を使用していることです。

4

3 に答える 3

1

したがって、(現時点では) それができない場合、もう 1 つのオプションは、アプリケーションが終了しようとしているときにアプリケーションの状態を保存し、plist ファイルで UIApplicationExitsOnSuspend = true を設定することです。これにより、アプリケーションは一時停止ではなく終了し、スクリーンショットが回避され、ボードが効果的に「非表示」になります。欠点は、アプリが再起動したときにセッション状態を読み取る必要があることです...これは有用ですアプリケーションが状態を失うことなく実際に終了するように設計でき、正直なところ、少し極端な場合。そうは言っても、それがあなたがやろうとしていることを効果的に行う唯一の方法かもしれません.

他のアイデアとしては、アプリケーションが中断している場合でも、画面に大きな黒いレイヤーを追加できるかどうかを確認することです。おそらくこれは、setNeedsDisplay をネイティブに設定することによって、何らかの形で内部画面の更新をトリガーします。また、アルファを変更する代わりに、すべてのレイヤーを一時的に削除して、同様の効果があるかどうかを確認することを検討してください。

于 2012-11-15T19:14:45.537 に答える
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 プロトコルに準拠しています。コロナの内部デリゲートは、実装されている場合、プロトコルのメソッドを呼び出します。

次の点に注意してください。

Apple が廃止したメソッドは無視されます。ほとんどの場合、クラスのバージョンは、コロナの対応するバージョンの UIApplicationDelegate メソッドの後に呼び出されます。バージョンが以前に呼び出される状況が 1 つあります。アプリが一時停止またはバックグラウンドに移行しようとしている状況では、applicationWillResignActive: や applicationDidEnterBackground: など、コロナのバージョンの前にメソッドが呼び出されます。

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

しかし、これは単なる推測です。それが役に立てば幸い!

編集:

私が考えていたのは、あなたができる本当に簡単なことは、それを外でキャッチして「一時停止」画面を表示し、アプリケーションがフォアグラウンドになったときにそれを非表示にすることです。

于 2012-11-13T09:09:09.760 に答える