2012-07-25 26 views
0

我正在爲iPhone的RPG類型的遊戲。我想要做的是有一個庫存,只允許你保存特定數量的特定類型的物品。我認爲要做到這一點,我只是要擴展NSMutableArray併爲其添加限制。我無法弄清楚這樣做的最好方法。這裏的想法,我有我的頭......擴展NSMutableArray的行爲就像一個Java陣列

Backpack.h

@interface Backpack : NSMutableArray { 
    Class * arrayClass; 
    NSMutableArray * array; 
    int limit; 
} 

-(id) initWithClass:(Class) type andLimit:(int) num; 

@end 

Backpack.m

@implementation Backpack 

    -(id)initWithClass:(Class) type andLimit:(int) num { 

    arrayClass = type; 
    limit = num; 
    array = [NSMutableArray new]; 
    return self; 

    } 

    -(void)insertObject:(id) object atIndex:(int) index { 

    if([object isKindOfClass:arrayClass] && index < limit) { 
     // Insert it 
    } else { 
     // Throw Exception 
    } 

    } 

@end 
+0

您不會持有指向'Class'的指針,因爲它已經是一個指針了。 – 2012-07-26 00:35:58

回答

5

而不是延長的NSMutableArray,只需創建自己的類使用NSMutableArray的實例來保存項目。你的類可以有一個add方法或方法,這些方法或方法需要添加一些具有特定類類型(或實現特定接口)的項目。至於限制物品的數量,在你的addItem方法中,首先檢查被保存物品的數量。如果它大於您的限制,則不要允許添加項目。最後,你的類可以暴露一個size方法(例如getSize()),它告訴你在NSMutableArray的實例中內部已經有多少項目,這樣你可以防止當你的揹包「滿」時添加項目表單。

一般來說,組合(即從其他類的成員實例組成你自己的類)比擴展類和使用繼承來完成相同的行爲要好。例如,如果擴展NSMutableArray,那麼除了你的方法之外,所得到的類將公開該類的所有公共方法,這會導致從代碼重用和文檔立場出發的混亂類。

最後,你的問題真的不是關於Java,所以也許不應該用Java標籤來標記。

+0

謝謝你的建議。我按照你的建議去掉了標籤。 – CaldwellYSR 2012-07-26 01:49:20

1

要強加的限制並不真的需要類擴展,如果有任何使它易於使用且難以編寫的問題。

只要保持簡單,並將一些庫存相關的方法添加到類似自定義Player類的東西中,那麼您可能會想要在製作RPG的過程中設計某處。

@interface Player : NSObject { 
    NSMutableArray * inventory; 
    NSUInteger inventoryLimit; 
    //other centralized player data like stats, spells, or whatever 
} 
-(BOOL)addItemToInventory:(YourItemClass *)item; 
@end 

@implementation 
//... other impl stuff, like init 
-(BOOL)addItemToInventory:(YourItemClass *)item { 
    if([inventory count] < inventoryLimit) { 
    [inventory addObject:item]; 
    return TRUE; 
    } 
    else { 
    return FALSE; 
    } 
} 
@end 

請注意,我對「玩家」類的建議不是一個難的要求。有多種方法可以構建遊戲的類和數據...

+0

這確實看起來像是一個更明智的方法來解決我的目標。給出的其他答案更適合製作類似java的數組的問題。我已經有一個球員類,我正在做一個揹包課,但它似乎更有意義,只是使用揹包陣列。感謝您的建議 – CaldwellYSR 2012-07-26 01:53:33