4

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 名:'(null)' AccumulatedFrame:{{0, 0}, {0 , 0}}'

なぜこうなった?

4

1 に答える 1

5

同じ子インスタンスを何度も追加しています。毎回行ノードを作成し、毎回親ノードに追加すると、問題が解決します。

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)
    }
}
于 2014-12-15T21:39:10.430 に答える