Create a line with two CGPoints SpriteKit Swift

后端 未结 4 1101
名媛妹妹
名媛妹妹 2021-02-08 01:47

I am trying to make a simple app where you touch a point, and a sprite follows a line through that point to the edge of the screen, no matter where you touch. I want to draw lin

4条回答
  •  甜味超标
    2021-02-08 02:08

    Follow THIS tutorial step by step and you can achieve that.

    Consider the below code:

    override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
        let location = touches.anyObject()!.locationInNode(scene)
        if let pig = movingPig {
            pig.addMovingPoint(location)
        }
    }
    

    This is a simple method. You get the next position of the user’s finger and if you found a pig in touchesBegan(_:,withEvent:), as indicated by a non-nil movingPig value, you add the position to this pig as the next waypoint.

    So far, you can store a path for the pig—now let’s make the pig follow this path. Add the following code to update() inside GameScene.swift:

    dt = currentTime - lastUpdateTime
    lastUpdateTime = currentTime
    
    enumerateChildNodesWithName("pig", usingBlock: {node, stop in
        let pig = node as Pig
        pig.move(self.dt)
    })
    

    And you can see result:

    enter image description here

    Drawing Lines:

    At the moment, only the pig knows the path it wants to travel, but the scene also needs to know this path to draw it. The solution to this problem is a new method for your Pig class.

    func createPathToMove() -> CGPathRef? {
        //1
        if wayPoints.count <= 1 {
            return nil
        }
        //2
        var ref = CGPathCreateMutable()
    
        //3
        for var i = 0; i < wayPoints.count; ++i {
             let p = wayPoints[i]
    
        //4
        if i == 0 {
            CGPathMoveToPoint(ref, nil, p.x, p.y)
        } else {
            CGPathAddLineToPoint(ref, nil, p.x, p.y)
         }
     }
    
     return ref
     }
    

    this method to draw the pig’s path:

    func drawLines() {
    
    
    //1
      enumerateChildNodesWithName("line", usingBlock: {node, stop in
        node.removeFromParent()
      })
    
      //2
      enumerateChildNodesWithName("pig", usingBlock: {node, stop in
        //3
        let pig = node as Pig
        if let path = pig.createPathToMove() {          
          let shapeNode = SKShapeNode()
          shapeNode.path = path
          shapeNode.name = "line"
          shapeNode.strokeColor = UIColor.grayColor()
          shapeNode.lineWidth = 2
          shapeNode.zPosition = 1
    
          self.addChild(shapeNode)
        }
      })
    }
    

    And here is your result:

    enter image description here

    And you can set that path for the pig.

    You can modify that as per your need.

    Hope it will help.

提交回复
热议问题