2017-05-09 3 views
1

Je suis un débutant suivant le tutoriel here pour dessiner des formes dans Swift.Swift 3/SpriteKit - Dessiner des formes indépendantes avec le doigt

import SpriteKit 

class GameScene: SKScene { 

    var activeSlice: SKShapeNode! 
    var activeSlicePoints = [CGPoint]() 

    override func didMove(to view: SKView) { 
     createSlices() 
    } 

    func createSlices() { 
     activeSlice = SKShapeNode() 
     activeSlice.strokeColor = UIColor(red: 1, green: 0.9, blue: 0, alpha: 1) 
     activeSlice.lineWidth = 9 
     addChild(activeSlice) 
    } 

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     super.touchesBegan(touches, with: event) 
     if let touch = touches.first { 
      let location = touch.location(in: self) 
      activeSlicePoints.append(location) 
      redrawActiveSlice() 
     } 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
     guard let touch = touches.first else { return } 
     let location = touch.location(in: self) 
     activeSlicePoints.append(location) 
     redrawActiveSlice() 

    } 

    override func touchesEnded(_ touches: Set<UITouch>?, with event: UIEvent?) { 
} 

    func redrawActiveSlice() { 
     let path = UIBezierPath() 
     path.move(to: activeSlicePoints[0]) 
     for i in 1 ..< activeSlicePoints.count { 
      path.addLine(to: activeSlicePoints[i]) 
     } 
     activeSlice.path = path.cgPath 
    } 
} 

Avec ce code, lorsque vous relâchez le doigt puis touchez à nouveau pour dessiner, vous avez une ligne reliant les deux formes. Je voudrais dessiner des formes indépendantes. Peut-être en modifiant le code afin que pour chaque instance de touchesEnded(), le tableau de points représentant la forme soit stocké dans un tableau multidimensionnel et en créant un tableau de points pour chaque nouvelle instance de touchesBegan()?

Nous vous remercions de votre aide.

Répondre

0

Il est quelque chose comme

override func touchesEnded(_ touches: Set<UITouch>?, with event: UIEvent?) { 

    createSlices() 
} 
+0

Merci! Pour le faire fonctionner, j'ai dû ajouter 'activeSlicePoints.removeAll (keepingCapacity: true)' à touchesBegan() 'en plus de votre code. –