4

可変数のパラメーターを関数に渡す際に問題が発生しました。

-(void)addCharacterToScene:(NSString *)name withFrames:(CCSpriteFrame*)frames,... {
    va_list args;
    va_start(args, frames);
    id arg = va_arg(args,CCSpriteFrame*);
    int i=1;
    while (arg) {
        NSString *frame_name = [NSString stringWithFormat:@"%@_%i",name,i];
        NSLog(@"%@ \n%@",frame_name, arg);
        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFrame:arg name:frame_name];
        arg = va_arg(args,CCSpriteFrame*);
        i++;
    }
    va_end(args);
}

問題は、関数が最初の引数をスキップすることです。関数の呼び出しは次のようになります。

[self addCharacterToScene:@"wiz" withFrames:wizardFrame1,wizardFrame2,wizardFrame3,nil];

最初の位置にダミーオブジェクトを渡すことができ、それによって目的の結果が得られますが、より良い解決策が必要です。ありがとう!

4

1 に答える 1

6

これを初めて行う代わりに:

id arg = va_arg(args,CCSpriteFrame*);

行う:

id arg = frames;

Aは、関数で指定した引数のva_listに始まります。したがって、その議論を処理したい場合は、自分でそれから始める必要があります。va_start

于 2012-05-28T02:09:41.217 に答える