我是编程新手,一直在学习 swift 和 spritekit 在线类(class),试图从头开始创建我的第一个可以运行的游戏。
目前,我在尝试创建一系列独立运行的函数时遇到问题,等待一次只有一个函数运行,并无限循环。
第一个函数:
func shootTwentyArrows() {
var oneArrow = SKAction.runBlock{
self.shootArrow()
}
var waitBetweenArrows = SKAction.waitForDuration(arrowSpeed)
var fireAnArrow = SKAction.sequence([oneArrow, waitBetweenArrows])
self.runAction(SKAction.repeatAction(fireAnArrow, count: 20))
}
第二个函数:
func shootSpiral1() {
var leftArrow = SKAction.runBlock{
self.arrowFromLeft()
}
var rightArrow = SKAction.runBlock{
self.arrowFromRight()
}
var waitBetweenArrows = SKAction.waitForDuration(arrowSpeed)
var sequence = SKAction.sequence([leftArrow, waitBetweenArrows, rightArrow, waitBetweenArrows])
var spiral1 = SKAction.repeatAction(sequence, count: 5)
self.runAction(spiral1)
为了澄清,我正在尝试运行类似的东西: 射击二十箭() 完成后,shootSpiral1(),完成后重复。
预先感谢您的任何回复。
最佳答案
我想最正确的方法是稍微重构代码:
func shootTwentyArrows() -> SKAction {
let oneArrow = SKAction.runBlock{
self.shootArrow()
}
let waitBetweenArrows = SKAction.waitForDuration(arrowSpeed)
let fireAnArrow = SKAction.sequence([oneArrow, waitBetweenArrows])
return SKAction.repeatAction(fireAnArrow, count: 20)
}
func shootSpiral1() -> SKAction {
let leftArrow = SKAction.runBlock{
self.arrowFromLeft()
}
let rightArrow = SKAction.runBlock{
self.arrowFromRight()
}
let waitBetweenArrows = SKAction.waitForDuration(arrowSpeed)
let sequence = SKAction.sequence([leftArrow, waitBetweenArrows, rightArrow, waitBetweenArrows])
let spiral1 = SKAction.repeatAction(sequence, count: 5)
return spiral1
}
然后在代码中的某个地方你可以做类似的事情:
let spiralAction = shootSpiral1()
let oneArrowAction = shootTwentyArrows()
let sequence = SKAction.sequence([spiralAction, oneArrowAction])
let infiniteSequence = SKAction.repeatActionForever(sequence)
self.runAction(infiniteSequence)
我故意将函数名称保留为相同,这样你就明白了。
P.S. 将变量声明为 let
是一种常见的做法,只有当您稍后需要修改它时才将其声明为 var
。
关于swift - 如何创建一个运行两个函数且永不重叠的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442907/