2008-11-08 10 views
11

मैं वीडियो गेम की तरह स्क्रीन के चारों ओर ब्लॉक करने के लिए एक साधारण कोको ऐप पर हैकिंग कर रहा हूं। मुझे कुंजी प्रेस का पता लगाने की ज़रूरत है, लेकिन मेरे पास एक संवाद बॉक्स जैसे टेक्स्ट एंट्री फ़ील्ड नहीं होंगे।मैं वीडियो-गेम शैली कोको ऐप में महत्वपूर्ण इनपुट कैसे एकत्र करूं?

टेक्स्ट नियंत्रण के बिना मुझे मुख्य प्रेस कैसे प्राप्त हो सकता है? विशेष रूप से, मुझे तीर कुंजी प्राप्त करने की आवश्यकता है।

+1

मैंने अभी आपके संपादन को देखा है इसलिए मैंने तीर कुंजियों को दिखाने के लिए अपना जवाब अपडेट किया है :) एचटीएच, जे –

उत्तर

14

अपने खेल को देखते हुए, परिभाषित 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 

अधिक जानकारी के लिए NSView और NSEvent के दस्तावेज़ देखें। ध्यान दें कि keyDown और keyUp घटनाओं को वास्तव में NSResponder पर परिभाषित किया गया है, NSView के लिए सुपर क्लास।

+3

कुछ ध्यान देने योग्य है, क्या वह कुंजी है: और कीडाउन: अगर उपयोगकर्ता केवल एक संशोधक कुंजी दबाता है तो कॉल न करें, जैसे कि शिफ्ट, ctrl, alt या cmd। यह निश्चित रूप से अधिकांश ऐप्स के लिए उचित व्यवहार है, लेकिन संभवतः गेम के लिए नहीं। यदि आप एक संशोधक कुंजी दबाए जाने पर अपने ऐप को अधिसूचित करना चाहते हैं, तो आप [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

यह भी देखें [AcceptsFirstResponder] (http://stackoverflow.com/questions/7475394/nsopenglview-nswindow- संवाददाता- makefirstresponder-not-working) –