我创建了一个foreach循环,如下所示
for (int i = 0; i < 30; i++) {
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
NSCalendar *c = [NSCalendar currentCalendar];
NSDate *nowDate = [NSDate date];
NSDate *treeDate = [defaults objectForKey:@"tree_1"];
NSDateComponents *components = [c components:NSHourCalendarUnit fromDate:treeDate toDate:nowDate options:0];
NSInteger treeInt = components.hour;
if(treeInt >= 0){
[_tree1 setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"TreeStump.png"]];
}
}
我想要实现的是让循环增加tree_1
和_tree1
。我不确定如何将i
添加到2个位置的变量中。因此,在@""
和setSpriteFrame
方法
例如,i == 3
字符串@"tree_4"
和变量_tree4
。
答案 0 :(得分:0)
第一部分很简单:
[NSString stringWithFormat:@"tree_%i", i + 1];
%i
部分是一个类型说明符,它告诉底层算法它应该期望和int
参数。您可以这样使用:
NSDate *treeDate = [defaults objectForKey:[NSString stringWithFormat:@"tree_%i", i + 1]];
第二部分有点棘手,因为您必须修改代码。如果要在循环中迭代几个变量,最简单的方法是将它们放在一个数组中,并使用循环计数器来访问它中的项目。
看到你的循环有30次迭代,从一开始就将_treeX
变量存储在数组或其他容器中似乎是个好主意,以便不要有30个变量。将东西放入数组/容器中可以让您动态地更改项目数,而无需更改大量代码。
答案 1 :(得分:0)
我认为您需要以下内容,因为您在这里使用cocos2d
,您可以轻松访问在您拥有的任何父级中添加的精灵。
[NSString stringWithFormat:@"tree_%i", i + 1];
if(treeInt >= 0){
CCSprite *sprite = (CCSprite*)[self getChildByTag:i+1];
[sprite setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"TreeStump.png"]];
}
只需要为精灵设置标签,同时按照相同的顺序创建精灵。
答案 2 :(得分:0)
对于第一部分很简单,您可以使用格式为的字符串:
[NSString stringWithFormat:@"tree_%i", i + 1];
对于第二种,您可以使用objective c run time功能来访问名称为的实例变量。
Ivar class_getInstanceVariable(Class cls, const char * name)