2013-04-15 56 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];' –