2012-05-28 75 views
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]; 

我可以在第一位置通過一個虛擬對象,並給出了期望的結果,但必須有一個更好的解決方案。謝謝!

回答

6

而是這個做第一次的:

id arg = va_arg(args,CCSpriteFrame*); 

務必:

id arg = frames; 

一個va_list開始您在va_start函數指定參數後。所以如果你想處理這個論點,你必須自己開始。

+0

有道理。謝謝! – TCool

相關問題