1

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

为了计算每个动画的帧数,我打开 animations.plist 并迭代获取每个键的条目,删除文件名,并将每个帧(作为键)存储在 NSMutableDictionary 中,数量为我通过更新的 NSNumber迭代。问题是我不喜欢如何获取 NSNumber intValue,执行 +1,然后分配另一个 NSNumber 并重新设置键的值。有没有更好的方法来做到这一点?谢谢大家!(比如 .. 在 php OR JS 中将是字典 [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];
}
4

2 回答 2

1

除了 NSNumber,您可以创建一个 MyNumber 对象,其中包含一个 int/long 和一个属性来访问该数字,而不必在每次更改它时都执行整个分配操作。甚至可以有一个 addTo 方法。

于 2012-04-22T11:51:45.693 回答
0

不幸的是,使用 NSNumbers,除了获取它的整数值、递增它并将其放回您的 NSNumber 之外,别无他法。

但是为什么首先从 NSNumber 开始呢?为什么不从一个 int 开始,发挥你的魔力并将这个 int 放入你的 NSNumber 实例中呢?

向您展示我的意思:

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

NSNumber *myCounterAsNSNumber = [NSNumber numberWithInt:myCounterAsInt];
于 2012-04-22T11:20:51.990 回答