まず、OSX/Cocoaアプリケーションのプロジェクト(storyboardあり)を作成した状態で、Window Controller → Window の Attribute を設定
・「Full Screen」に「Primary Window」を設定
・他は適当です
ウィンド⇔フルスクリーンの切り替えが必要な場合はもう少し色々と設定する必要があるが、とりあえずフルスクリーンのみで動くアプリ=ゲームを作る前提ならこんな感じではなかろうかと。
次に、ViewController.m に以下を追加。
- (void)viewWillAppear
{
[self.view.window.contentView enterFullScreenMode:self.view.window.screen withOptions:nil];
[self.view.window makeFirstResponder:self.vram];
[NSCursor hide];
}
【やっていること】
・コンテントView(self.view.window.contentView)に対して enterFullScreenMode を発行
・何故かフルスクリーンにすると first responder が外れ、キー入力が受け付けられなくなった(キーを押すと「ポン」という警告音が鳴る)ので makeFirstResponder を発行しておく
・self.vram = self.viewの子View(ゲームのメインView)
・なお、Viewの構造としては以下のような感じです
- self.view : 画面一杯の真っ黒なNSView
- self.vram : ゲーム映像を表示するNSView
・マウスカーソルを消しておく
これでフルスクリーンになれました。
なお、NSViewのenterFullScreenMode以外にも、NSWindowのtoggleFullScreenでもフルスクリーンになれたのですが、そっちの方のやり方だと失われた first responder を復活させる方法がよく分からなかった(恐らく、フルスクリーン化が完了したことを検知するデリゲートとかで makeFirstResponder するのではないかと思うのですが、そのやり方が分からなかった)ので、NSViewの方法を採りました。
画面描画については、iOSと同じ方法(CALayerを使う方法)でできるので割愛。
UIKitを使っている場合は簡単にはできませんが、CALayerはOSXもiOSもだいたい同じ仕組みなので、自前の描画エンジンで画面描画をするなら、CALayerだけで描画する(or OpenGLで描画する)のが良いんじゃないかと思います。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。