2

MetalKitを使った「Game」テンプレートを使って、XcodeでOS X上でアプリケーションを作成しました。keyDown や keyUp などの入力イベントを処理するにはどうすればよいですか? 追加してみました

- (void)keyDown:(NSEvent *)theEvent
{
    NSLog( @"Key down\n" );
}

- (void)keyUp:(NSEvent *)theEvent
{
    NSLog( @"Key up\n" );
}

AppDelegate と GameViewController に入れますが、キーを押しても呼び出されません。

4

4 に答える 4

2

を使用していない場合MetalKitは、 のサブクラスであるビューを作成し、NSViewそこに次のメソッドを実装する必要があります。

- (void)keyDown:(NSEvent *)theEvent
{
    NSLog(@"onKeyDown Detected; Merry Christmas, by the way.");
}

- (BOOL)acceptsFirstResponder
{
    return YES;
}

ただし、 を使用している場合MetalKitは、同じことを行い、代わりにビューのサブクラス化で前述のメソッドを実装しますMTKView

両方のバージョンでテストしました。keyDownキーが押されたときに呼び出されます。

于 2015-12-26T01:40:15.457 に答える
2

述べたように、MTKView をサブクラス化し、サブクラスで keyDown を処理する必要があります。また、Storyboard のビューのクラスを MTKView からサブクラスに設定することも忘れないでください。

これは、MTKView で発生する不快なビープ音を取り除く方法です (未処理の keyDown が原因です)。

ただし、コメントに記載されているように、Storyboard のクラスを MTKView にリセットすると、keyDown は引き続き処理されます (ビープ音は鳴りません)。奇数。

回答の1つで提案されているように、サブクラス化せずに機能させることはできませんでした。その段階で GameViewController へのポインターを取得するにはどうすればよいですか?

于 2020-02-19T12:39:22.827 に答える