Swift中SKAction.runBlock()的问题

时间:2016-06-18 15:18:59

标签: swift sprite-kit skaction

以下是我正在处理的简单SpriteKit游戏的一些代码:

let square = SKShapeNode()
let square2 = SKShapeNode()

override func didMoveToView(view:SKView) {
    var moveSquare: SKAction
    moveSquare = SKAction.moveTo(CGPoint(x: someNumber, y:otherNumber), duration: NSTimeInterval(3))

    square.runAction(SKAction.sequence([moveSquare1, SKAction.runBlock(checkIfSquareMatches(square)),SKAction.removeFromParent()]))
    square2.runAction(SKAction.sequence([SKAction.waitForDuration(1.0),SKAction.runBlock(self.addChild(self.square2)) ,moveSquare, SKAction.removeFromParent()]))
}

func checkIfSquareMatches(shape:SKShapeNode) {...}

所以我有两个错误,一个在square.runAction行,另一个在square2.runAction行。第一个说

"无法转换类型'()'的值预期参数类型' dispatch_block_t' (又名' @convention(block)() - >()')"

第二个与上述相同,除了"类型'()'"它说

"输入' Void' (又名'()')"

我认为是因为"(又名'()')"。

为什么我会收到这些错误,如何修复错误?我在stackoverflow上看到一个关于在SKAction.runBlock()中运行函数问题的稍微类似的帖子,但是解决方案声明问题是你不能在runBlock中返回一个值,但是我的函数没有返回任何值;它只会改变某些变量的值,所以我没有看到问题。感谢。

1 个答案:

答案 0 :(得分:0)

当你将snippets放在runBlock语句中时,除非它们是一个没有参数的简单func调用,否则它们必须在花括号{}内

将其更改为

square.runAction(SKAction.sequence([moveSquare1, SKAction.runBlock( { self.checkIfSquareMatches(self.square) } ),SKAction.removeFromParent()]))
square2.runAction(SKAction.sequence([SKAction.waitForDuration(1.0),SKAction.runBlock( { self.addChild(self.square2 } )) ,moveSquare, SKAction.removeFromParent()]))

}

并且错误消失

请注意,您必须使用self引用变量。在runBlock调用