1

そのため、作成中のゲームのキャッシュにアニメーション スプライト フレームをロードした後、各アニメーションのフレーム数を数えます。これを行うのは、ゲーム構成に各アニメーションの継続時間の値があり、CCAnimation を作成すると、遅延属性が AnimationDuration/FramesAmount になるためです。

アニメーションごとのフレーム数をカウントするには、animations.plist を開き、すべてのキーを取得してエントリを繰り返し、ファイル名を削除し、すべてのフレームを (キーとして) NSMutableDictionary に保存します。反復。問題は、NSNumber intValue を取得し、+1 を実行してから、別の NSNumber を割り当ててキーの値をリセットする方法が気に入らないことです。これを行うより良い方法はありますか?? 皆さんありがとう!(ように.. php OR JSは辞書[フレーム] ++になります)

コードは次のとおりです。

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 ではなく、int/long を含む MyNumber オブジェクトを作成し、プロパティを変更するたびに割り当て全体を行うことなく、番号にアクセスできます。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 に答える