2010-07-08 6 views
15

तो मैं एक साधारण आईफोन गेम पर काम कर रहा हूं और स्थानीय उच्च स्कोर टेबल बनाने की कोशिश कर रहा हूं। मैं एक सरणी बनाना चाहता हूं और इसमें उच्चतम स्कोर को धक्का देना चाहता हूं।मैं उद्देश्य सी में CGFloats की सरणी कैसे बना सकता हूं?

CGFloat score; 
    score=delegate.score; 
    NSInteger currentindex=0; 
    for (CGFloat *oldscore in highscores) 
    { 
     if (score>oldscore) 
     { 
      [highscores insertObject:score atIndex:currentindex] 
      if ([highscores count]>10) 
      { 
       [highscores removeLastObject]; 

      } 

     } 
     currentindex+=1; 
    } 

समस्या यह है कि अधिकतमअंक एक NSMutableArray है, जो कर सकते हैं केवल दुकान वस्तुओं है: नीचे दिए गए कोड मैं अब तक है। तो यहां मेरा सवाल है, एक सरणी में CGFloats को स्टोर करने का सबसे अच्छा तरीका क्या है? क्या उनके अलग-अलग प्रकार की सरणी है जो CGFloats का समर्थन करती है? क्या एक CGFloat को किसी ऑब्जेक्ट में बदलने का उनका आसान तरीका है?

और कृपया इस तथ्य पर टिप्पणी न करें कि मैं ऐप प्रतिनिधि में स्कोर संग्रहीत कर रहा हूं, मुझे पता है कि यह एक बुरा विचार है, लेकिन मुझे अब एक सिंगलटन बनाने की मनोदशा नहीं है कि ऐप्स लगभग किया हुआ।

+1

CGFloat को लपेटने के लिए NSNumber का उपयोग करें? – yehnan

+4

दुर्भाग्यवश मुझे पता नहीं था कि नीचे दिए गए अच्छे व्यक्ति ने मुझे तब तक NSNumbers का उपयोग कैसे किया है। – meman32

उत्तर

26

आप केवल एक NSArray वस्तुओं जोड़ सकते हैं, तो आप आप एक सरणी के लिए CGFloat रों जोड़ने चाहते हैं तो आपको NSNumber उपयोग कर सकते हैं।

उदाहरण के लिए:

NSNumber * aNumber = [NSNumber numberWithFloat:aFloat]; 

तो यह वापस पाने के लिए:

CGFloat aFloat = [aNumber floatValue]; 
+0

धन्यवाद, मैं कोशिश करूँगा। संपादित करें: यह बहुत अच्छा काम करता है, धन्यवाद – meman32

+6

एक्सकोड 4.5 के साथ, यह आपके NSNumber प्राप्त करने के लिए '@ (floatVariable)' के लिए संघनित किया जा सकता है। उदाहरण के लिए, 'NSNumber * aNumber = @ (4.65);' – WDUK

+1

यह सुरक्षित नहीं है! यह अब काम कर सकता है कि iDevices अभी भी 32-बिट आर्किटेक्चर का उपयोग कर रहे हैं, लेकिन एक बार जब वे कुछ वर्षों में 64-बिट पर जाते हैं तो यह टूट जाएगा। एकमात्र सुरक्षित तरीका है CFCumber ऑब्जेक्ट्स का उपयोग KCFNumberCGFloatType के साथ करना। – JanX2

12

CGFloatयानी आदिम सरणियों तो तरह का निर्माण किया जा सकता है ...

CGFloat colors[] = { 1, 0, 0, 1 }; 

और बाद में " इस्तेमाल किया "एक फैशन में ...

CGContextSetFillColor(context, colors); 

या (अधिक संक्षेप में, कास्टिंग के माध्यम से) ...

CGContextSetFillColor(context, (CGFloat[]){ 1, 0, 0, 1 }); 

C सरणियों सकल मुझे बाहर ... लेकिन इस के साथ "मानक ©" किया जा सकता है!

+3

अभी आसान है। दूसरा जवाब "गलत" नहीं है, और यह कि यह करने का एक और तरीका है (विशेष रूप से सुविधाजनक यदि आप जगह पर ऑब्जेक्ट्स का उपयोग कर रहे हैं)। आपकी विधि अधिक कुशल होगी, लेकिन पूरे आवेदन के बावजूद लचीली नहीं हो सकती है। – WDUK

+0

इस तरह से सी आधारित कार्यों जैसे "CGColorCreate()" के लिए संकेत दिया गया है, इसलिए मुझे इसके बारे में याद दिलाने के लिए धन्यवाद। – Kirbinator

संबंधित मुद्दे