我想简单地使用 SKShapeNode 画一条线。我正在使用 SpriteKit 和 Swift。
到目前为止,这是我的代码:
var line = SKShapeNode()
var ref = CGPathCreateMutable()
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
}
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let locationInScene = touch.locationInNode(self)
CGPathMoveToPoint(ref, nil, locationInScene.x, locationInScene.y)
CGPathAddLineToPoint(ref, nil, locationInScene.x, locationInScene.y)
line.path = ref
line.lineWidth = 4
line.fillColor = UIColor.redColor()
line.strokeColor = UIColor.redColor()
self.addChild(line)
}
}
每当我运行它并尝试画一条线时,应用程序就会因错误而崩溃:
原因:'试图添加一个已经有父级的 SKNode:SKShapeNode 名称:'(空)'accumulatedFrame:{{0, 0}, {0, 0}}'
为什么会这样?
最佳答案
好吧,您一遍又一遍地添加相同的子实例。每次创建线节点并将其添加到父节点,然后它将解决您的问题。
var ref = CGPathCreateMutable()
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
if let touch = touches.anyObject() as? UITouch {
let location = touch.locationInNode(self)
CGPathMoveToPoint(ref, nil, location.x, location.y)
}
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let locationInScene = touch.locationInNode(self)
var line = SKShapeNode()
CGPathAddLineToPoint(ref, nil, locationInScene.x, locationInScene.y)
line.path = ref
line.lineWidth = 4
line.fillColor = UIColor.redColor()
line.strokeColor = UIColor.redColor()
self.addChild(line)
}
}
关于ios - 用 SKShapeNode 画一条线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27493261/