【发布时间】:2015-03-10 06:24:28
【问题描述】:
moveTo 的 duration 属性在 runBlock 内部时不被遵循,从而允许序列中的后续操作在应该只在 duration 秒后执行时立即执行。
代码A(序列正确执行):
let realDest = CGPointMake(itemA.position.x, itemA.position.y)
let moveAction = SKAction.moveTo(realDest, duration: 2.0)
itemB.runAction(SKAction.sequence([SKAction.waitForDuration(0.5), moveAction, SKAction.runBlock {
itemB.removeFromParent()
}]))
代码 B(序列未正确执行):
let badMoveAction = SKAction.runBlock {
let realDest = CGPointMake(itemA.position.x, itemA.position.y)
let moveAction = SKAction.moveTo(realDest, duration: 2.0)
itemB.runAction(moveAction)
}
itemB.runAction(SKAction.sequence([SKAction.waitForDuration(0.5), badMoveAction, SKAction.runBlock {
itemB.removeFromParent()
}]))
在Code A 中,itemB 在moveAction 完成(大约 2 秒)后被删除。这是正确的顺序。
在Code B 中,itemB 在badMoveAction 完成之前被删除,这意味着itemB 永远不会从其原始位置移动。就好像Code B 中不支持持续时间属性一样。
我们如何才能像在Code B 中一样移动itemB,但要确保序列中的下一个操作在badMoveAction 完成之前不会开始?
【问题讨论】:
标签: ios swift sprite-kit