2010-07-08 31 views
15

Vì vậy, tôi đang làm việc trên một trò chơi iPhone đơn giản và đang cố gắng tạo một bảng điểm số cao tại địa phương. Tôi muốn tạo một mảng và đẩy điểm số cao nhất vào đó. Dưới đây là mã tôi có cho đến thời điểm này:Làm cách nào để tạo một mảng CGFloats trong mục tiêu c?

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

Vấn đề là highscores là NSMutableArray, chỉ có thể lưu trữ các đối tượng. Vì vậy, đây là câu hỏi của tôi, cách tốt nhất để lưu trữ CGFloats trong một mảng là gì? Là một loại khác nhau của mảng hỗ trợ CGFloats? Là một cách đơn giản của họ để biến một CGFloat thành một đối tượng? Và xin vui lòng không bình luận về thực tế là tôi đang lưu trữ điểm số trong các đại biểu ứng dụng, tôi biết đó là một ý tưởng tồi, nhưng tôi không có tâm trạng để làm cho một singleton bây giờ mà các ứng dụng gần như làm xong.

+1

sử dụng NSNumber để gói CGFloat? – yehnan

+4

Thật không may là tôi không biết cách sử dụng NSNumbers cho đến khi người đẹp dưới đây nói với tôi. – meman32

Trả lời

26

Bạn chỉ có thể thêm đối tượng vào NSArray, vì vậy nếu bạn muốn thêm CGFloat s vào mảng, bạn có thể sử dụng NSNumber.

Ví dụ:

NSNumber * aNumber = [NSNumber numberWithFloat:aFloat]; 

Sau đó, để có được nó trở lại:

CGFloat aFloat = [aNumber floatValue]; 
+0

Cảm ơn, tôi sẽ thử điều đó. Chỉnh sửa: Nó hoạt động tốt, cảm ơn – meman32

+6

Với Xcode 4.5, điều này có thể được cô đặc thành '@ (floatVariable)' để có được NSNumber của bạn. Ví dụ: 'NSNumber * aNumber = @ (4.65);' – WDUK

+1

Điều này KHÔNG an toàn! Nó có thể làm việc ngay bây giờ mà iDevices vẫn đang sử dụng một kiến ​​trúc 32-bit, nhưng một khi họ chuyển sang 64-bit trong một vài năm điều này sẽ phá vỡ. Cách an toàn duy nhất là sử dụng các đối tượng CFNumber với kCFNumberCGFloatType. – JanX2

12

CGFloattức là mảng nguyên thủy thể được xây dựng như vậy ...

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

và sau đó " sử dụng "trong một thời trang tương tự ...

CGContextSetFillColor(context, colors); 

HOẶC (ngắn gọn hơn, qua đúc) ...

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

C mảng tổng tôi ra ... nhưng điều này có thể được thực hiện với "© tiêu chuẩn"!

+3

Dễ dàng ngay bây giờ. Câu trả lời khác không phải là "sai", nhiều hơn rằng nó là một cách khác để làm điều đó (đặc biệt là thuận tiện nếu bạn đang sử dụng các đối tượng trên khắp nơi). Phương pháp của bạn sẽ hiệu quả hơn, nhưng có thể không linh hoạt dù ra toàn bộ ứng dụng. – WDUK

+0

Đây là cách được gợi ý cho các chức năng dựa trên C như "CGColorCreate()", vì vậy cảm ơn bạn đã nhắc tôi về điều này. – Kirbinator

Các vấn đề liên quan