2013-04-15 139 views
0

嗨,目前我的遊戲正在從fl_food.plist載入fl_gfood.png或fl_bfood.png。這工作正常,但現在我有17個不好的食品項目.png和17個好的食品項目.png。我的問題是如何隨機顯示每個組中的17個項目之一?我能爲sprite文件名做一個通配符嗎?見下面的代碼註釋。還有人建議我可以將.plist文件名加載到一個數組中並隨機選擇一個名稱,這將如何完成。隨機顯示精靈圖像

@implementation Food 

+ (void)loadAssets { 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     [[FLSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[AssetHelper getDeviceSpecificFileNameFor:@"fl_food.plist"]]; 
    }); 

} 

- (id)init { 
    self = [super init]; 
    if (self) { 
     self.size     = CGSizeMake(16 * __HIGHRES_SCALE, 16 * __HIGHRES_SCALE); 
     self.offset     = CGPointMake(8 * __HIGHRES_SCALE, 8 * __HIGHRES_SCALE); 
     self.removeAfterCollision = YES; 
     self.collideable   = NO; 
     self.score     = 10; 
    } 
    return self; 
} 

- (FLSprite *)sprite { 
    if(_sprite == nil) { 

     if(self.score < 10) { 
      _sprite = [FLSprite spriteWithSpriteFrameName:@"fl_gfood.png"]; // fl_gfood_*.png ... Can I do something like this? 
     } else { 
      _sprite = [FLSprite spriteWithSpriteFrameName:@"fl_bfood.png"]; 
     } 
    } 
    return _sprite; 
} 
+1

只是要返回精靈隨機或者根據您想要的任何條件名稱的函數。 – Setrio

+0

@setrio你可以展示並舉例說明如何做到這一點? – acctman

+0

檢查arc4random,用所有圖像名稱構建一個數組,並使用arc4random爲該數組生成idx。只需返回給定的idx – Setrio

回答

1

我會用arc4random()和stringByAppendingString

- (FLSprite *)sprite { 
    if(_sprite == nil) { 
     NSString *disFood; 

     disFood = (self.score < 10) ? @"fl_gfood" : @"fl_bfood"; 

     //random # between 1 - 10 
     int randNum = (arc4random() % 10)+1; 

     NSString *formattedName = [NSString stringWithFormat:@"_%i.png",randNum]; 

     disFood = [disFood stringByAppendingString:formattedName]; 

     _sprite = [FLSprite spriteWithSpriteFrameName:disFood]; 

     NSLog(disFood);//Logging disFood String; 
    } 
    return _sprite; 
} 
+0

我的應用掛在沒有錯誤。怎麼樣,我有另一個plist有34個文件名,我只是想要34個文件中的一個隨機加載到frameName。我認爲這會更簡單? – acctman

+0

對不起,我忘了將disFood設置爲附加字符串,如下所示: –

+0

'disFood = [disFood stringByAppendingString:[NSString stringWithFormat:@「_%i.png」,randNum]]; _sprite = [FLSprite spriteWithSpriteFrameName:disFood];' –