2017-08-26 82 views
0

我有一個小遊戲的工作,我的節點是移動這樣的:如何避免SKNode眨眼時,我刪除移動節點?

SKAction * actionMove = [SKAction moveToY:HEIGHT + self.frame.size.height/2 duration:actualDuration]; 
[self runAction:[SKAction sequence:@[actionMove, loseAction]] withKey:@"start"]; 

,我dissmiss從另一種觀點認爲,它只是叫這樣的:

- (void)dissmissBubbleWithType:(BubbleType)type{ 
__block BOOL isDismiss = NO; 
NSString *name = [[ResManager sharedManager] nameFromBubbleType:type]; 
[self enumerateChildNodesWithName:name usingBlock:^(SKNode * _Nonnull node, BOOL * _Nonnull stop) { 
    BubbleNode *bubbleNode = (BubbleNode *)node; 
    isDismiss = YES; 
    [bubbleNode cracked]; 
}]; 
if (isDismiss) { 
    [self.bubbleDelegate dismissBubbleWithType:type]; 
} 

}

當我解僱一個類型時,我使用enumerateChildNodesWithName usingBlock 來移除我的節點;

這是bubbleNode破解,我用它來播放gif並將其刪除;

- (void)cracked{ 
self.name = @"cracked"; 
[self removeAllActions]; 
SKAction * actionMoveDone = [SKAction animateWithTextures:[ResManager sharedManager].bubbleCrackArray timePerFrame:0.2]; 
SKAction *done = [SKAction removeFromParent]; 
[self runAction:[SKAction sequence:@[actionMoveDone,done]]]; 

}

現在的問題是,當我叫dissmissBubbleWithType,節點眨眼到舊位置。 我認爲原因是當我調用dissmissBubbleWithType和enumerateChildNodesWithName:name時,節點的position.y是100,但是在它刪除的時候,position.y是90(因爲它正在移動)。 我嘗試了一些辦法,如 1.removeAllActions然後播放GIF 2.removeFromParent無間隙GIF 3.使用的foreach在scene.children 但它仍然閃爍

所以皮斯幫助我,非常感謝:)

回答

0

最後我解決了它。 我把enumerateChildNodesWithName放入一個子線程,並把[bubbleNode破解]到主線程中。 所以這個枚舉不會影響節點的移動。