Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 递增NSNumber_Objective C_Animation_Cocos2d Iphone_Nsnumber - Fatal编程技术网

Objective c 递增NSNumber

Objective c 递增NSNumber,objective-c,animation,cocos2d-iphone,nsnumber,Objective C,Animation,Cocos2d Iphone,Nsnumber,因此,在我将动画精灵帧加载到我正在制作的游戏的缓存中之后,我计算每个动画有多少帧。我这样做是因为在游戏配置中,每个动画的持续时间都有一个值,当我创建动画时,延迟属性是AnimationDuration/FramesAmount 为了计算每个动画的帧数,我打开animations.plist并迭代条目获取每个关键帧,删除文件名,并将每个帧(作为关键帧)存储在NSMutableDictionary中,该数量作为我在迭代过程中更新的NSNumber。问题是,我不喜欢如何获取NSNumber intVa

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

为了计算每个动画的帧数,我打开animations.plist并迭代条目获取每个关键帧,删除文件名,并将每个帧(作为关键帧)存储在NSMutableDictionary中,该数量作为我在迭代过程中更新的NSNumber。问题是,我不喜欢如何获取NSNumber intValue,do+1,然后分配另一个NSNumber并重新设置密钥的值。有没有更好的方法??谢谢大家!(比如说..在php或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];
}
NSString*finalPath=[path stringByAppendingPathComponent:@“animations.plist”];
NSDictionary*plistData=[[NSDictionary Dictionary WithContentsOfFile:finalPath]retain];
NSMutableDictionary*conf=[NSMutableDictionary];
NSDictionary*frames=[plistData valueForKey:@“frames”];
编号*金额;
对于(int i=0;i<[帧计数];i++){
NSString*frame=[[frames allKeys]对象索引:i];
nsrrange range=[帧范围字符串:@“/”选项:NSBackwardsSearch];
frame=[frame substringToIndex:range.location];
if([conf objectForKey:frame]==nil)
金额=[[NSNumber alloc]initWithInt:1];
其他的
amount=[[NSNumber alloc]initWithInt:[[conf objectForKey:frame]intValue]+1];//amount++。。。
[conf setObject:amount forKey:frame];
}

不幸的是,对于NSNumbers,除了获取其整数值、递增并将其放回NSNumber之外,没有其他方法

但是为什么首先要从一个NSN号码开始呢?为什么不从一个int开始,施展你的魔法,把这个int放到你的NSNumber实例中呢

让你明白我的意思:

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

NSNumber *myCounterAsNSNumber = [NSNumber numberWithInt:myCounterAsInt];

不幸的是,对于NSNumbers,除了获取其整数值、递增并将其放回NSNumbers之外,没有其他方法

但是为什么首先要从一个NSN号码开始呢?为什么不从一个int开始,施展你的魔法,把这个int放到你的NSNumber实例中呢

让你明白我的意思:

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

NSNumber *myCounterAsNSNumber = [NSNumber numberWithInt:myCounterAsInt];

您可以创建一个MyNumber对象,其中包含int/long以及访问该数字的属性,而不是NSNumber,而无需在每次更改该数字时执行全部alloc操作。甚至可以有一个addTo方法

您可以创建一个MyNumber对象,其中包含int/long以及访问该数字的属性,而不必在每次更改该数字时执行全部alloc操作,而不必使用NSNumber。甚至可以有一个addTo方法

对不起,我不明白你的建议,你会怎么做?我认为那行不通。我用每个动画中的每一帧迭代一个字典,我不知道一个动画的帧是否总是分组在一起,所以,我需要在每次迭代中检查帧,然后将其分配到conf字典中的适当对象。那么这确实是不可能的。NSDictionary只能保存对象,不能保存原语。您必须始终将基本体包装在对象中,才能将它们插入到您的集合中…抱歉,我不理解您的建议,您将如何执行?我认为这不起作用。我用每个动画中的每一帧迭代一个字典,我不知道一个动画的帧是否总是分组在一起,所以,我需要在每次迭代中检查帧,然后将其分配到conf字典中的适当对象。那么这确实是不可能的。NSDictionary只能保存对象,不能保存原语。你总是需要把你的原语包装在对象中,才能将它们插入你的收藏中……很酷,谢谢,这有点难看,但我认为它比我现在拥有的要好。@Spiegel——你认为NSNumber是什么,“在封面下”?它只是另一个对象类(实际上是一个类家族)——发明它并不是因为它是一个超级高效的实现,而是因为许多不同的其他接口需要一个表示数字的对象,有一个标准的对象与发明自己的新用途相比是很好的。很酷,谢谢,这有点难看,但我认为它比我现在拥有的要好。@Spiegel——你认为NSNumber是什么,“在封面下”?它只是另一个对象类(实际上是一个类家族)——发明它并不是因为它是一个超级高效的实现,而是因为许多不同的接口需要一个表示一个数字的对象,与发明自己的新用途相比,拥有一个标准的对象是件好事。