2010-07-08 24 views
15

Bu yüzden basit bir iPhone oyunu üzerinde çalışıyorum ve yerel bir yüksek skor tablosu yapmaya çalışıyorum. Bir dizi yapmak ve en yüksek puanları ona itmek istiyorum.Nesne c'de nasıl bir CGFloats dizisi yapabilirim?

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; 
    } 

sorun yüksek skorlar bir NSMutableArray, can sadece mağaza nesneleri olmasıdır: Aşağıda ben bugüne kadar koddur. Yani benim sorum, bir dizide CGFloats saklamak için en iyi yolu nedir? CGFloats'ı destekleyen farklı bir dizi mi? CGFloat'ı bir nesneye dönüştürmenin basit bir yolu var mı?

Ve uygulama delegesi puanları sakladığım gerçeği hakkında yorum yapmayın, bunun kötü bir fikir olduğunu biliyorum, ama neredeyse tek bir uygulama yapmak zorunda değilim havasında değilim. yapılır.

+1

CGFloat'ı sarmak için NSNumber'i kullanın? – yehnan

+4

Maalesef aşağıdaki güzel kişi bana kadar, NSNumbers kullanmayı bilmiyordum. – meman32

cevap

26

Yalnızca NSArray nesnelerini ekleyebilirsiniz, böylece CGFloat s dizisini bir diziye eklemek isterseniz NSNumber kullanabilirsiniz.

Örn:

Sonra
NSNumber * aNumber = [NSNumber numberWithFloat:aFloat]; 

geri almak için:

CGFloat aFloat = [aNumber floatValue]; 
+0

Teşekkürler, bunu deneyeceğim. Düzenleme: Bu harika çalıştı, teşekkürler – meman32

+6

Xcode 4.5 ile, bu NSNumber'inizi almak için '@ (floatVariable)' ile yoğunlaştırılabilir. Örneğin, 'NSNumber * aNumber = @ (4.65);' – WDUK

+1

Bu güvenli DEĞİLDİR! Şimdi iDevices'in hala 32 bitlik bir mimari kullandığını, ancak birkaç yıl içinde 64-bit'e geçtiklerinde işe yarayabilir. Tek güvenli yol, CFNumber nesnelerini kCFNumberCGFloatType ile kullanmaktır. – JanX2

12

CGFloatyani şöyle yapılabilir ilkel diziler ... sonradan

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

ve " "moda benzer şekilde ..."

CGContextSetFillColor(context, colors); 

VEYA (daha öz, döküm aracılığıyla) ...

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

C diziler beni brüt ... ama bu "standart ©" ile yapılabilir CAN!

+3

Şimdi kolay. Diğer cevap “yanlış” değil, daha çok bunu yapmanın başka bir yolu (özellikle her yerindeki nesneleri kullanıyorsanız kullanışlı). Yönteminiz daha verimli olacak, ancak bir bütün olarak uygulamaya rağmen esnek olmayabilir. – WDUK

+0

"CGColorCreate()" gibi C tabanlı işlevler için ima edilen yol budur, bu yüzden bana bunu hatırlattığınız için teşekkür ederim. – Kirbinator

İlgili konular