2015-02-06 3 views
0

У меня проблема с перемещением нескольких узлов в массиве. Существует код:Переместить несколько SKSpriteNode в массив с задержкой?

SKSpriteNode* paddle = (SKSpriteNode*)[self childNodeWithName: paddleXCategoryName]; 

SKAction *move = [SKAction moveTo:CGPointMake(paddle.position.x, CGRectGetMaxY(self.scene.frame)) duration:1.5]; 

NSMutableArray *shots = [[NSMutableArray alloc] init]; 

for (int i = 1; i<=10; i++) { 
    SKSpriteNode *shot = [[SKSpriteNode alloc] initWithImageNamed:@"shoot.png"]; 
    shot.size = CGSizeMake(2, 5); 

    shot.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(2, 6)]; 
    shot.physicsBody.categoryBitMask = shotCategory; 
    shot.physicsBody.contactTestBitMask = blockCategory; 
    shot.physicsBody.collisionBitMask = blockCategory; 

    [shots addObject:shot]; 
} 

int i = 0; 
for (SKSpriteNode *shot in shots) { 
    SKAction *wait = [SKAction waitForDuration:0.2+0.3*i]; 
    shot.position = paddle.position; 
    [self addChild:shot]; 
    [shot runAction:[SKAction sequence:@[wait, move]] completion:^{ 
     [shot removeFromParent]; 
    }]; 
} 

У меня есть только один узел. Что я делаю не так?

ответ

0

На самом деле все ваши узлы движутся вместе без задержки в ту же точку. Это связано с тем, что вы не увеличиваете свою переменную i внутри цикла. Попробуйте код ниже. Для правильной работы SKAction также установите значение affectedByGravity на значение false.

int i = 0; 
for (SKSpriteNode *shot in shots) { 
    SKAction *wait = [SKAction waitForDuration:0.2+0.3*i]; 
    shot.position = paddle.position; 
    [self addChild:shot]; 
    shot.physicsBody.affectedByGravity = false; // Added line. 
    [shot runAction:[SKAction sequence:@[wait, move]] completion:^{ 
     [shot removeFromParent]; 
    }]; 

    i++; // Added line. 
} 
0

Все они выполняют одно и то же действие перемещения. Каждый спрайт должен запустить свою собственную копию действия. Попробуйте изменить заявление runAction, заменив move с [move copy]:

[shot runAction:[SKAction sequence:@[wait, [move copy]]] completion:^{ 
    [shot removeFromParent]; 
}]; 
+0

спасибо за ответ :), но не помогло (( – Pavel

Смежные вопросы