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 回答