gpt4 book ai didi

ios - 使用带有完成处理程序的循环在多个节点上使用单个 SKAction 动画

转载 作者:行者123 更新时间:2023-11-29 02:30:30 25 4
gpt4 key购买 nike

目标:使用循环在多个节点上应用单个 SKAction 动画,同时等待完成处理程序。

    func animateShuffle(cards: [Card], completionHandler:(success: Bool) -> Void) {
var rotationInRadians:CGFloat = CGFloat(M_PI)
var rotateFirstDeck = SKAction.rotateByAngle(rotationInRadians, duration: 1.0)
var moveFirstDeck = SKAction.moveToX(-150, duration: 1.0)
var returnToOrigPosition = SKAction.moveToX(-125, duration: 1.0)
var firstDeckSequence = SKAction.sequence([moveFirstDeck, rotateFirstDeck, returnToOrigPosition])
var rotateSecondDeck = SKAction.rotateByAngle(-rotationInRadians, duration: 1.0)
var moveSecondDeck = SKAction.moveToX(-100, duration: 1.0)
var secondDeckSequence = SKAction.sequence([moveSecondDeck, rotateSecondDeck, returnToOrigPosition])


for (index, Card) in enumerate(cards){

if index % 2 == 0{
Card.image.runAction(firstDeckSequence)
}
else{
Card.image.runAction(secondDeckSequence)
}
}

//hack
cards[0].image.runAction(firstDeckSequence, completion: { () -> Void in
completionHandler(success: true)
})

}

这里我调用启动另一个动画的函数:

animateShuffle(newDeck.deck, completionHandler: { (success) -> Void in
print("entered")
var drawnCards = [Card]()
if let areThereCards = newDeck.drawCards(4){
drawnCards = areThereCards
}
self.dealCards(drawnCards)
})

我使用了 hack 来达到我想要的 99%,但我的直觉告诉我有更好的方法来做到这一点。我如何知道最后一个节点何时完成动画?

最佳答案

两个序列都运行 3 秒,因此当第一个完成 block 运行时,您可以安全地假设它们都已完成。为了 100% 确定在完成处理程序中设置一个 bool ivar,然后在场景的 didEvaluateActions 方法中运行您的后序代码。

或者计算您运行了多少个序列,然后在完成 block 中增加一个计数器,并在两个计数器匹配时运行您的代码。

关于ios - 使用带有完成处理程序的循环在多个节点上使用单个 SKAction 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com