我对 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++;
}];