以下是我正在开发的一款简单的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)”))”
第二个和上面说的一样,除了上面说的不是“type”()”
“键入'Void'(又名')”
我相信这是同样的事情,因为“(又名')”。
为什么我会得到这些错误,我如何才能纠正它们?我在stackoverflow上看到一篇关于在SKAction.runBlock()中运行函数问题的文章,但是解决方案指出问题的方法是不能在runBlock中返回值,但是我的函数不返回任何值;它只更改一些变量的值,所以我看不到问题所在。谢谢。

最佳答案

当您在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调用中

关于swift - Swift中的SKAction.runBlock()问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37898541/

10-12 02:45