我试图编写一个全局查找表。
我的游戏数据以字符/字符串格式存储在plist中,但在加载时需要以整数/ID格式呈现。
例如,在级别数据文件中,“p”表示玩家。在游戏代码中,玩家表示为整数1。这让我可以进行一些位运算等操作。我在这里大大地简化了问题,但是想要传达的点是相同的。此外,还有将精灵表上的坐标转换。
目前,在代码的几个位置上使用case语句进行字符串->整数、整数->字符串、整数->坐标等转换。这很糟糕,当然,我宁愿使用字典查找来解决这个问题。
我创建了一个名为levelInfo的类,并希望为此定义字典进行转换,然后再创建类方法以在需要进行转换或处理级别数据时调用。
NSString *levelObjects = @"empty,player,object,thing,doohickey";
int levelIDs[] = [0,1,2,4,8];
// etc etc
@implementation LevelInfo
+(int) crateIDfromChar: (char) crateChar {
int idx = [[crateTypes componentsSeparatedByString:@","] indexOfObject: crateChar];
return levelIDs[idx];
}
+(NSString *) crateStringFromID: (int) crateID {
return [[crateTypes componentsSeparatedByString:@","] objectAtIndex: crateID];
}
@end
有没有更好的方法?每次调用这个翻译函数都构建临时数组或字典等感觉不太对。而且我也不知道如何声明一个常量NSArray或NSDictionary。
请告诉我一个更好的方法...
+initialize
初始化类级别的内容?我猜它只被调用一次? - Jeff Bstatic NSArray *levelObjects;
吗? - tehwalrus