我正在为iphone制作RPG游戏。我想要做的是有一个库存,只允许您持有特定数量的特定类型的项目。我想这样做我只是扩展NSMutableArray并添加限制。我无法弄清楚这样做的最好方法。这就是我脑子里的想法......
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 :(得分:5)
不是扩展NSMutableArray,而是创建自己的类,该类使用NSMutableArray实例来保存项目。您的类可以有一个或多个add方法,这些方法或方法要求将项添加到某个类类型(或实现特定接口)。至于限制项目数量,在addItem方法的一侧,首先检查所持有的项目数量。如果它大于您的限制,则不允许添加该项目。最后,你的类可以公开一个size方法(例如getSize()),它告诉你在NSMutableArray的实例中已经内部保存了多少项,这样你就可以防止在你的背包“满”时添加项目形式。 / p>
一般来说,组合(即从其他类的成员实例组成自己的类)比扩展类和使用继承来完成相同的行为要好。例如,如果扩展NSMutableArray,那么除了你的方法之外,生成的类将公开该类的所有公共方法,从而导致从代码重用和文档角度看出一个混乱的类。
最后,你的问题实际上与Java无关,所以也许这不应该用Java标签标记。
答案 1 :(得分: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
请注意,我对“玩家”课程的建议并不是一项艰难的要求。您可以通过多种方式为游戏构建类和数据......