2008-11-08 3 views
11

Ich hacke auf einer einfachen Cocoa-App, um Blöcke wie ein Videospiel um den Bildschirm zu bewegen. Ich muss Tasten drücken, aber ich werde keine Texteingabefelder haben, wie es ein Dialogfeld hätte.Wie sammle ich Schlüsseleingaben in einer Videospiel-Cocoa-App?

Wie bekomme ich Tastenbetätigungen ohne Textsteuerelemente? Insbesondere brauche ich Pfeiltasten.

+1

Ich sah gerade Ihre Bearbeitung, also aktualisierte ich meine Antwort, um die Pfeiltasten anzuzeigen :) HTH, J –

Antwort

14

In Ihrem Spiel Ansicht, die keyUp und keyDown Methoden definieren:

@interface MyView : NSView 
-(void)keyUp:(NSEvent*)event; 
-(void)keyDown:(NSEvent*)event; 
@end 

@implementation MyView 

-(void)keyUp:(NSEvent*)event 
{ 
    NSLog(@"Key released: %@", event); 
} 

-(void)keyDown:(NSEvent*)event 
{ 
    // I added these based on the addition to your question :) 
    switch([event keyCode]) { 
     case 126: // up arrow 
     case 125: // down arrow 
     case 124: // right arrow 
     case 123: // left arrow 
      NSLog(@"Arrow key pressed!"); 
      break; 
     default: 
      NSLog(@"Key pressed: %@", event); 
      break; 
    } 
} 
@end 

die Dokumentation für NSView und NSEvent für weitere Informationen siehe. Beachten Sie, dass die Ereignisse keyDown und keyUp tatsächlich in NSResponder, der Superklasse für NSView, definiert sind.

+3

Etwas zu beachten, ist, dass keyUp: und keyDown: nicht aufgerufen werden, wenn der Benutzer nur eine Zusatztaste drückt, wie Shift, Strg, Alt oder Cmd. Dies ist natürlich ein vernünftiges Verhalten für die meisten Apps, aber möglicherweise nicht für Spiele. Wenn Sie möchten, dass Ihre App benachrichtigt wird, wenn eine Zusatztaste gedrückt wird, können Sie [flagsChanged:] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference) implementieren /Reference.html#//apple_ref/occ/instm/NSResponder/flagsChanged :). – sarnesjo

+0

Siehe auch [acceptsFirstResponder] (http://stackoverflow.com/questions/7475394/nsopenglview-nswindow-nsresponder-makefirstresponder-not-working) –

Verwandte Themen