增加NSNumber

时间:2012-04-22 11:14:46

标签: objective-c animation cocos2d-iphone nsnumber

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

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

以下是代码:

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

2 个答案:

答案 0 :(得分:1)

您可以使用int / long创建一个MyNumber对象而不是NSNumber,而不是每次更改时都可以访问该数字而无需执行整个alloc事件。甚至可以有一个addTo方法。

答案 1 :(得分:0)

不幸的是,对于NSNumbers,除了获取其整数值,增加它并将其放回NSNumber之外别无他法。

但为什么首先要开始使用NSNumber?为什么不从一个int开始,做你的魔法并将那个int放在你的NSNumber实例中?

告诉你我的意思:

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

NSNumber *myCounterAsNSNumber = [NSNumber numberWithInt:myCounterAsInt];