0

plist からすべての値を取得することで、Cocos2d ゲームを動的に開発しています。たとえば、次のリンクにある plist から値を取得しています。

ここに画像の説明を入力

つまり、アニメーション CCRotateTo のタイプとその値を plist から取得したいということです。私が行ったところですが、値は次のようないくつかの括弧が追加されています:

ここに画像の説明を入力

CCRotateTo 、 CCScale などのすべてのアニメーションを seqarray という名前の配列に追加しました。不要なブラケットが配列の各インデックス値に追加されるため、CCSequence にこれらの seqarray 値を追加するときに大きな問題が発生します。次のように GDB にエラーが表示されます。

ここに画像の説明を入力

この問題を解決するために私を助けてください

編集

//コードで指定された ActionValues には、「Scene01.Child.animations」などの plist 内のアニメーションのパスがあります。キー パスでは、「Animate1.parameters」などの ActionValues 内のパスを送信します。

[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;

}

これは、配列に値を追加する方法です。この問題を解決するために私を助けてください

4

1 に答える 1

1

角かっこは問題ではありません。

後ろから始めましょう。NSMutableArrayはduration、対応するセレクターがないメッセージを受信したことを通知しています。これは論理的なバグのように見えます。おそらく、配列自体ではなく、配列に格納されているオブジェクトにメッセージを送信したいと考えています。

次のような角かっこが表示されます。

<CCRotateTo = … | Tag = 1>

それらはオブジェクトをログに記録することから来ます。たとえば、これを行う場合:

NSLog(@"%@", rotateAction);

オブジェクトのdescriptionメソッドを実行します。これは通常、オブジェクトを上記の構文の文字列、オブジェクトのクラス名、ポインタ、および山かっこで囲まれた追加データとして返します。

于 2013-03-18T20:22:01.443 に答える