我正在通过从plist中检索所有值来动态开发Cocos2d游戏。例如,我正在从此链接中给出的plist中检索值:
那就是我想得到动画类型CCRotateTo和它的plist值。我做了什么,但价值来自于这样的一些附加括号:
我在名为seqarray的数组中添加了CCRotateTo,CCScale等所有动画。由于在数组的每个索引值中添加了不需要的括号,因此在CCSequence中添加这些seqarray值时会给我带来很大的问题。它在GDB中显示了一些错误:
任何人请帮我解决这个问题
修改
//代码中给出的ActionValues具有plist中动画的路径,例如“Scene01.Child.animations”。在关键路径中,我将在ActionValues中发送路径,例如“Animate1.parameters”
[seqarray addobject: [self DictValue1:@"Scene01.Mario.animations" Keypath:@"Animate1.parameters"]];
我将传递场景路径,它是下面方法的动画路径
+(id)DictValue1 :(id)actionvalues Keypath:(NSString *)Key1
{
NSArray * multiarrays1 = [actionvalues valueForKeyPath:Key1];
for(id actions in multiarrays1)
{
if([[actions valueForKey:@"type"] isEqualToString:@"CCRotateTo"])
{
[sequenceArray addObject:[self RotateTo:actions]];
}
}
return sequenceArray
}
+(CCRotateTo *)RotateTo:(id)Fadevalues
{
if([Fadevalues isKindOfClass:[NSDictionary class]])
{
CCLOG(@"Fadevalues %@",Fadevalues);//All values with duration angle and type
CCLOG(@"Fadevalues %@",[Fadevalues valueForKey:@"parameters"]);// Duration value
NSArray * sss = [Fadevalues valueForKey:@"parameters"];
CCRotateTo * Rotate = [CCRotateTo actionWithDuration:[[Fadevalues valueForKey:@"duration"] intValue] angle:[[sss objectAtIndex:0]intValue]];
return FadeOut;
}
return nil;
}
这是我将值添加到数组的方式。请帮我解决这个问题
答案 0 :(得分:1)
括号不是你的问题。
让我们从后面开始:NSMutableArray告诉你它收到了一条没有相应选择器的消息duration
。这看起来像一个逻辑错误,您可能希望将消息发送到存储在数组中的对象,而不是数组本身。
您看到的括号,如:
<CCRotateTo = … | Tag = 1>
他们来自记录对象。例如,如果您这样做:
NSLog(@"%@", rotateAction);
它将运行对象的description
方法。这通常会将对象作为上面语法中的字符串,对象的类名,它的指针以及括在尖括号中的附加数据返回。