2008-11-08 9 views
11

Estoy pirateando una simple aplicación Cocoa para hacer que los bloques se muevan por la pantalla como un videojuego. Necesito detectar pulsaciones de teclas, pero no voy a tener campos de entrada de texto como los que tendría un cuadro de diálogo.¿Cómo puedo recopilar información clave en una aplicación Cocoa de videojuegos?

¿Cómo obtengo pulsaciones de teclas sin controles de texto? En particular, necesito obtener las teclas de flecha.

+1

Acabo de ver su edición, así que actualicé mi respuesta para mostrar las teclas de flecha :) HTH, J –

Respuesta

14

En su visión del juego, definir los métodos y keyUp keyDown:

@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 

consulte la documentación de NSView y NSEvent para obtener más información. Tenga en cuenta que los eventos keyDown y keyUp están realmente definidos en NSResponder, la súper clase para NSView.

+3

Algo para tener en cuenta, es que keyUp: y keyDown: no reciben llamadas si el usuario presiona solo una tecla modificadora, como shift, ctrl, alt o cmd. Esto es, por supuesto, un comportamiento razonable para la mayoría de las aplicaciones, pero posiblemente no para los juegos. Si desea que se notifique su aplicación cuando se pulsa una tecla modificadora, puede implementar [flagsChanged:] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSResponder_Class/Reference /Reference.html#//apple_ref/occ/instm/NSResponder/flagsChanged :). – sarnesjo

+0

Ver también [acceptsFirstResponder] (http://stackoverflow.com/questions/7475394/nsopenglview-nswindow-nsresponder-makefirstresponder-not-working) –

Cuestiones relacionadas