我试图用来SKAction.repeatActionForever
运行由SKAction
和重复之间的随机延迟组成的序列。
override func didMoveToView(view: SKView) {
let sequence = [
SKAction.runBlock(spawnObstacle), //Missing argument for parameter 'queue' in call
SKAction.waitForDuration(self.random(min: player.speed, max: player.speed * 2 as CGFloat))
]
runAction(SKAction.repeatActionForever(SKAction.sequence(sequence)))
}
func random() -> CGFloat{
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
func random(#min:CGFloat, max:CGFloat) -> CGFloat {
return random() * (max - min) + min
}
spawnObstacle
是一个没有参数的函数,该函数返回void,并且player.speed
是一个CGFloat
。
我得到的错误Missing argument for parameter 'queue' in call
上SKAction.runBlock(spawnObstacle)
。我认为这与类型有关,出于某种原因,runBlock不喜欢spawnObstacle()
,并且正在尝试调用
func runBlock(_ block: dispatch_block_t,queue queue: dispatch_queue_t?) -> SKAction
代替
func runBlock(_ block: dispatch_block_t) -> SKAction
我试着打电话SKAction.runBlock(spawnObstacle as dispatch_block_t)
看看会发生什么,它摆脱了错误,只提出了另一个错误:
SKAction.waitForDuration(self.random(min: player.speed, max: player.speed * 2 as CGFloat)) //Extra argument 'min' in call
我认为这个类似于另一个(除了伪造编译器之外,我不确定我是否真的解决了)。似乎编译器认为player.speed不是CGFloat,所以它转到random()
而不是CGFloat random(#min:CGFloat, max:CGFloat)
。
我的问题是:据我所知,为什么在类型正确的情况下会发生这两个错误?
编辑:这是 spawnObstacle()
func spawnObstacle() -> Void{
let obst = Obstacle(
color: UIColor.redColor(),
size: CGSize(width: 50.0,height: 50.0))
let node = SKSpriteNode(color: obst.color, size: obst.size)
node.position = CGPoint(x: size.width, y: 0 + obst.size.height / 2)
addChild(node)
let duration = player.speed
let actionMove = SKAction.moveTo(CGPoint(x:0 - obst.size.width / 2,y:node.position.y), duration: NSTimeInterval(duration))
let actionMoveDone = SKAction.removeFromParent()
node.runAction(SKAction.sequence([actionMove,actionMoveDone]))
}
Swift有时会发出与实际问题无关的错误。在这种情况下,您的问题是SKAction.waitForDuration
期望使用NSTimeInterval,但是您正在传递CGFloat。您需要从CGFloat构造一个NSTimeInterval。
let sequence = [
SKAction.runBlock(spawnObstacle),
SKAction.waitForDuration(NSTimeInterval(random(min: player.speed, max: player.speed * 2)))
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句