嗨,我正在用Sprite Kit制作一款游戏,我有一个方法,它有一个NSArray,一个for循环和一些SKACTIONS。这个数组有7个元素。for循环随机选取一个数组的内容并显示在屏幕上,使用SKActions,该项按比例缩小,另一项按比例扩大。然而,在模拟器的底部,它显示节点的数量在不断增加。例如,如果出现一个精灵,而不是1个节点,那么模拟器屏幕底部显示的节点数是4个节点。你觉得哪里出了问题?
这是我的代码。
-(void) ItemMakerMe {
myArray = [[NSMutableArray alloc] initWithObjects:@"item1", @"item2", @"item3", @"item4", @"item5", @"item6", @"MyNull", nil];
NSUInteger arraypicker = arc4random() % [myArray count];
for (int i=0; i < arraypicker; ++i) {
NSString *d1 = [myArray objectAtIndex:i];
sprites = [SKSpriteNode spriteNodeWithImageNamed:d1];
sprites.name = @"items";
sprites.position = CGPointMake(ScalarRandomRange(0, self.size.width/2), ScalarRandomRange(0, self.size.height/2));
sprites.xScale = 0;
sprites.yScale = 0;
[self addChild:sprites];
}
}
-(void) OneItemONLY {
SKAction *appear = [SKAction scaleTo:0.19 duration:0.5];
SKAction *waiter = [SKAction waitForDuration:0.5];
SKAction *scaleDown = [SKAction scaleTo:0.0 duration:0.5];
SKAction *remover = [SKAction removeFromParent];
[sprites runAction:[SKAction sequence:@[appear, waiter, scaleDown, remover]]];
}
同样在init方法中,我像这样运行它:
[self runAction:[SKAction repeatActionForever:[SKAction sequence:@[[SKAction performSelector:@selector(ItemMakerMe) onTarget:self],
[SKAction waitForDuration:2.0]]]]];
[self runAction:[SKAction repeatActionForever:[SKAction sequence:@[[SKAction performSelector:@selector(OneItemONLY) onTarget:self],
[SKAction waitForDuration:2.0]]]]];
如果我理解正确的话,我认为for循环运行i
值的最后一个节点的动作,但仍然在循环结束前添加其他精灵。
。E:假设arraypicker
的值为4,然后for循环将从数组中选择NSString
,用图像,名称,位置等初始化sprites
对象,然后将添加到self的子对象中,这重复了4次,但只有最后添加的sprites
实例将具有您想要的图像并将运行操作。
我的意思是,如果你只想从数组中选择一个随机值,并设置它的属性,也许你可以删除for循环。
Summary: [self addChild:sprites]
添加了相同的对象i
次,导致节点数增加