2009-02-27 11 views
0

私はNSOpenGLViewサブクラス(GameView)を含むNSWindowサブクラス(GameWindow)を持っています。ココア - NSOpenGLViewの後ろにアニメーションを持つモーダルウィンドウ

アプリがウィンドウされています(フルスクリーンにはなりません)。

GameViewのOpenGLアニメーションは、タイマーによって1秒間に30回起動されます。

プレゼンテーションの理由から、GameViewアニメーションは、アプリ内で何が起こっているかに関係なく続行する必要があります。それを止める唯一の時間は致命的なエラーの場合です。

GameWindowのアニメーションが継続している間に、さまざまな「モーダル」ココアウィンドウを表示する必要があります(新しいゲームの選択、終了の確認など)。これらのシートの一部はシートになる可能性がありますが、主要なものはスタンドアローンウィンドウ(WebViewで完成)として表示する必要があります。

私の質問:これらの「ダイアログ」ウィンドウを表示して、自分のアプリタイマーが起動してアニメーションは続行されますが、「ダイアログ」ウィンドウが閉じられるまでGameWindowのGameViewへのユーザー入力はブロックされますユーザー?

(この時点でTiger + Leopardをサポートする必要があります)

答えて

1

通常のシート/ダイアログ技術を試しましたか?この状況では正常に動作するはずです。タイマーは実行ループの一部としてスケジュールされます。これはモーダルシートやウィンドウがあるときには停止しないため、イベントがブロックされている間はバックグラウンドでレンダリングを続けることができます。 (必要に応じて、独自のデリゲートと終了セレクタに記入を除く。)

[NSApp beginSheet:sheetWindow modalForWindow:mainWindow modalDelegate:nil didEndSelector:NULL contextInfo:nil]; 

+0

ああ、わかります!私は自分のシートや "ダイアログ"ウィンドウで-modalForWindowを呼び出すと、ユーザがダイアログを閉じるまで、自分のGameWindowへのタイマーとイベントの両方をブロックすると信じていました。 私は試してみましょう。おかげさまで、Joelとあなたの超高速応答に非常に感謝します。 –

0

あなたが(シートに移動せずに)現在のモーダルウィンドウを維持したい場合は、何かにNSTimerを自分のスケジュールを設定してみてくださいそのrunloopの実行が停止するとすぐにハングするデフォルトのrunloopモード(NSDefaultRunLoopMode)の他に、

関連する問題