精灵套件节点不移除fromparent



嗨,我正在用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次,导致节点数增加

最新更新