0

NSOpenGLView サブクラス (GameView) を含む NSWindow サブクラス (GameWindow) があります。

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

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

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

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

私の質問: これらの「ダイアログ」ウィンドウを表示して、アプリ タイマーが起動し続け、アニメーションが続行されるようにするにはどうすればよいですか?

(現時点では、Tiger + Leopard をサポートする必要があります)。

4

2 に答える 2

1

通常のシート/ダイアログのテクニックを試しましたか? この状況では、それらは正常に機能するはずです。タイマーは実行ループの一部としてスケジュールされ、モーダル シートまたはウィンドウがある場合は停止しないため、イベントがブロックされている間もバックグラウンドでレンダリングを続行できるはずです。

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

(必要に応じて独自のデリゲートとエンド セレクターを入力する場合を除きます。)

于 2009-02-27T04:50:35.307 に答える
0

現在のモーダル ウィンドウを (シートに移動せずに) 維持したい場合は、既定の実行ループ モード (NSDefaultRunLoopMode) 以外の何かで NSTimer を自分でスケジュールしてみてください。実行ループの実行が停止するとすぐにハングします。

于 2009-03-02T03:01:54.107 に答える