2012-04-22 33 views
1

因此,在我将游戏中的动画精灵帧加载到缓存中后,我计算了每个动画有多少帧。我这样做是因为在游戏配置中每个动画的持续时间都有一个值,当我创建CCAnimation时,延迟attr是AnimationDuration/FramesAmount。Incrementing NSNumber

要计算每个动画的帧数,我打开animations.plist并迭代获取每个键的条目,删除文件名,并将每个帧(作为键)存储在NSMutableDictionary中,其量为NSNumber我通过迭代进行更新。问题是,我不喜欢我需要获取NSNumber的intValue,do +1,然后分配另一个NSNumber并重新设置该键的值。有没有更好的方式做到这一点?谢谢大家! (如..在PHP或JS将dictonary [帧] ++)

下面是代码:

NSString *finalPath = [path stringByAppendingPathComponent:@"animations.plist"]; 
NSDictionary *plistData = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain]; 

NSMutableDictionary *conf = [NSMutableDictionary dictionary]; 
NSDictionary *frames = [plistData valueForKey:@"frames"]; 

NSNumber *amount; 
for(int i=0; i < [frames count]; i++) { 
    NSString *frame = [[frames allKeys] objectAtIndex:i]; 

    NSRange range = [frame rangeOfString:@"/" options:NSBackwardsSearch]; 
    frame = [frame substringToIndex:range.location]; 

    if([conf objectForKey:frame] == nil) 
     amount = [[NSNumber alloc] initWithInt:1]; 
    else 
     amount = [[NSNumber alloc] initWithInt:[[conf objectForKey:frame] intValue]+1];//amount++... 

    [conf setObject:amount forKey:frame]; 
} 

回答

1

不是一个NSNumber您可以创建一个int /长mynumber的对象无论在它和属性,而不必做整体ALLOC访问数每次你改变它的时候。甚至可以有一个addTo方法。

+0

很酷,谢谢,它有点丑陋,但我认为它比现在好。 – Agustin 2012-04-22 13:01:17

+0

@Spiegel - 你认为NSNumber是什么,“在掩护下”?它只是另一个对象类(实际上是一个类的家族) - 发明并不是因为它在某种程度上是超高效的实现,而是因为许多不同的其他接口需要一个代表数字的对象,并且有一个标准的对象与每个新用途发明自己的。 – 2012-04-22 14:27:15

0

不幸的是,与NSNumbers,没有其他方式比得到它的整数值,增加它并放回你的NSNumber中。

但是为什么从一开始就用NSNumber呢?为什么不从一个int开始,做你的魔法并将该int放入你的NSNumber实例中?

要告诉你我的意思是:

int myCounterAsInt = 0; 
for (...loopcondition..) 
{ 
    myCounterAsInt++; 
} 

NSNumber *myCounterAsNSNumber = [NSNumber numberWithInt:myCounterAsInt]; 
+0

对不起,我不明白你的建议,你会怎么做? – Agustin 2012-04-22 11:24:23

+0

我不认为这会奏效。我用每个动画的每一帧迭代一个字典,我不知道一个动画的帧是否总是被组合在一起,所以,我需要在每次迭代中检查帧,然后将它赋给正确的对象在conf字典 – Agustin 2012-04-22 11:38:59

+0

啊,我明白了。那确实是不可能的。 NSDictionary只能保存对象,而不能是基元。你总是不得不将自己的原始物体包裹在物体中,以便能够将它们插入到你的收藏中... – verhage 2012-04-22 11:51:03