检测到SKSpriteNode已完成移动

时间:2015-01-13 05:53:27

标签: ios objective-c sprite-kit

我对 SpriteKit 相当新,我无法想出这个。当您运行SKAction移动SKSpriteNode时,您可以将块添加为完成处理程序,甚至可以按顺序执行SKActions。但经过几次尝试后,我发现在移动Node之后,但在它到达目的地之前调用了序列或处理程序。我试图找出一种方便的方法来检测移动何时最终完成(并且节点到达目的地)。

我正在使用以下方法移动SKSpriteNode

+ (SKAction *)moveTo:(CGPoint)location
        duration:(NSTimeInterval)sec

编辑(代码)

在下面的代码中,我在moveArray中有一些需要移动的SKSpriteNodes。我为每个人创建了一个移动动作。在完成处理程序中,我让它们消失。我有一个actionArray,它将这些操作分组,然后作为一个组运行(所有对象需要同时移动)。完成此移动后,我需要更新游戏的分数。这是在最后完成的。但我所看到的是,在节点开始移动之后,但在它们到达目的地之前,分数会增加。

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

for(SKSpriteNode* r in moveArray){

    SKAction *move = [SKAction moveTo:CGPointMake(r.position.x,-20.0f) duration: 1.0f];

    SKAction* action = [SKAction runBlock:^{
        [r runAction:move completion:^{
            [r removeFromParent];
        }];
    }];

    [actionArray addObject:action];

}

SKAction *groupAction = [SKAction group:actionArray];
[self runAction:groupAction completion:^(void){
     self.score++;
 }];

0 个答案:

没有答案