在那里,我正在制作一个使用Sprite Kit的游戏,我有一个方法,它有一个NSArray,一个for循环和一些SKACTIONS。现在,这个数组有7个项目。 for循环随机选取一个数组的内容并在屏幕上显示并使用SKActions,该项目按比例缩小,另一个按比例放大。然而,在similuator的底部,它表明节点的数量不断堆积。例如,如果出现一个精灵,而不是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]]]]];
答案 0 :(得分:0)
如果我理解正确,我相信for循环运行i
值的最后一个节点的动作,但仍然在循环结束之前添加其他精灵。
IE:假设arraypicker
的值为4,那么for循环将从数组中选择NSString
,用图像,名称初始化sprites
对象,位置等,然后它被添加到自己的孩子,这重复4次但只有最后添加的sprites
实例将具有您想要的图像并将运行动作。
我的意思是,如果您只想从数组中选择一个随机值,并设置其属性,则可以删除for循环。
摘要:[self addChild:sprites]
正在添加相同的对象i
次,并导致节点增量。