以下是我正在处理的简单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中返回一个值,但是我的函数没有返回任何值;它只会改变某些变量的值,所以我没有看到问题。感谢。
答案 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调用