Hier ist ein Code eines einfachen SpriteKit Spiel arbeite ich an:Probleme mit SKAction.runBlock() in Swift
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) {...}
So hatte ich zwei Fehler, eine auf der square.runAction Linie und die andere auf die Zeile "square2.runAction". Die erste sagt
"Can not Werte vom Typ konvertieren '()' zu erwarteten Argumenttyp 'dispatch_block_t' (auch bekannt als '@convention (Block)() ->()')"
Die zweite sagt die gleiche wie oben, nur statt „Typ‚()‘“, heißt es
„Typ‚Void‘(auch bekannt als‚()‘)“
die ich glaube, ist die gleiche Sache, weil der „(auch bekannt als '() ') ".
Warum bekomme ich diese Fehler und wie kann ich sie beheben? Ich sah einen ähnlichen Beitrag in Stackoverflow über das Problem der Ausführung einer Funktion in einem SKAction.runBlock(), aber die Lösung gab an, das Problem sei, dass Sie keinen Wert im runBlock zurückgeben können, aber meine Funktion gibt keinen Wert zurück; Es ändert nur die Werte einiger Variablen, daher sehe ich das Problem nicht. Vielen Dank.
Vielen Dank! Dies hat das Programm funktioniert, aber die Quadrate werden immer noch nicht zur Szene hinzugefügt (das addchild (square2) scheint das Quadrat nicht hinzuzufügen). Keine weiteren Fehler, aber der Code tut nicht, was er tun soll. Irgendeine Idee warum? – RPatel99
Übrigens bin ich ziemlich sicher, dass es tatsächlich nicht hinzugefügt wird, weil ich die Knotenzahl eingeschaltet habe und es nicht so viele Knoten gibt, wie es sein sollte, wenn die addChild() funktionierte. Auch das SKShapeNode-Quadrat (exakt gleiche Eigenschaften wie square2) aus der ersten SKAction.runAction wird außerhalb der Aktion hinzugefügt, und es funktioniert einwandfrei, so dass mit dem Quadrat nichts falsch ist. – RPatel99
Sie haben square2, das eine Aktion ausführt square2.runAction (SKAction.sequence ([SKAction.waitForDuration (1.0), SKAction.runBlock ({self.addChild (self.square2})), moveSquare, SKAction.removeFromParent()])) aber es ist noch nicht zur Szene hinzugefügt, so dass es keine Aktion ausführen kann. sollte self.runAction sein –