2017-09-08 8 views
0

ドラッグ・フィンガーで線を描きたいので、最初のタップ位置から現在の線まで線を引くことができます。しかし、私は前に描いた線を削除することはできません。私はこのコードを使って行を削除します。ios - SKShapeNodeを使用した線の描画と削除

for line in self.children { 
    line.removeFromParent() 
} 

ただし、新しい行を追加すると、削除された行がすべて表示されます。

下記のコードがあります。

import SpriteKit 
import GameplayKit 

class GameScene: SKScene { 

    private var label : SKLabelNode? 
    private var spinnyNode : SKShapeNode? 

    // For Line 
    var startPoint: CGPoint? 
    var path = CGMutablePath() 

    override func didMove(to view: SKView) { 
    } 


    func touchDown(atPoint pos : CGPoint) { 
     print("touchDown") 
     startPoint = pos 
    } 

    func touchMoved(toPoint pos : CGPoint) { 
     print("touchMoved") 

     for line in self.children { 
      line.removeFromParent() 
     } 

     plotLine(atPoint: startPoint!, toPoint: pos) 
    } 

    func plotLine(atPoint start: CGPoint, toPoint end: CGPoint) { 
     path.move(to: start) 
     path.addLine(to: end) 

     let temp_shape = SKShapeNode() 
     temp_shape.path = path 
     temp_shape.strokeColor = UIColor.white 
     temp_shape.lineWidth = 2 

     self.addChild(temp_shape) 
    } 
+0

どこが「ライン」と呼ぶノードの定義は? –

答えて

0

このようにそれを試してみてください:

var startPoint: CGPoint? 
var tempLine: SKShapeNode! 
var completedLines: [SKShapeNode] = [] 

func touchDown(atPoint pos : CGPoint) { 
    print("touchDown") 
    startPoint = pos 

    tempLine = SKShapeNode() 
    tempLine.strokeColor = UIColor.white 
    tempLine.lineWidth = 2 
    self.addChild(tempLine) 
} 

func touchMoved(toPoint pos : CGPoint) { 
    print("touchMoved") 

    plotLine(atPoint: startPoint!, toPoint: pos) 
} 

func touchUp(atPoint pos: CGPoint) { 
    completedLines.append(tempLine) 
    tempLine = nil 
} 

func plotLine(atPoint start: CGPoint, toPoint end: CGPoint) { 
    var path = CGMutablePath() 
    path.move(to: start) 
    path.addLine(to: end) 

    tempLine.path = path 
} 

func deleteLine(atIndex index: Int) { 
    completedLines[index].removeFromParent() 
    completedLines.remove(at: index) 
} 

func deleteLastLine() { 
    if let lastLine = completedLines.last { 
     lastLine.removeFromParent() 
     completedLines.dropLast() 
    } 
} 

だからあなたtempLinesのそれぞれは、現在のアレイに保存されます。また、削除する行を削除する必要がある場合は、削除関数を呼び出すことができます。たとえば、あなたはあなたがそうのようなタッチダウンでそれをやりたい、新しいものを開始する前に、前の行を削除する必要がある場合:

func touchDown(atPoint pos : CGPoint) { 
    self.deleteLastLine() 

    print("touchDown") 
    startPoint = pos 

    tempLine = SKShapeNode() 
    tempLine.strokeColor = UIColor.white 
    tempLine.lineWidth = 2 
    self.addChild(tempLine) 
} 
+0

それは仕事です、ありがとうございます。 – STH

関連する問題