2015-02-06 11 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

모두 동일한 이동 동작을 실행합니다. 각 스프라이트는 자체 액션 복사본을 실행해야합니다. [move copy]move를 대체하여 runAction 문을 변경해보십시오 : 귀하의 노드의 사실

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

답변을 주셔서 감사합니다 :)하지만 도움이되지 않았다 (( – Pavel