沿着UIBezierPath移动Sprite

时间:2017-07-17 23:47:24

标签: ios swift sprite-kit uibezierpath skaction

我在向UIBezierPath移动精灵时遇到了一些麻烦。我从我的视图控制器获取此路径,它正在传递正确的路径。关于为什么这不是动画的任何想法?最终我希望能够沿着不同的bezier路径移动多个精灵。

func play(){
    let img = SKSpriteNode(imageNamed:"ball.png")
    img.position = CGPoint(x: self.frame.size.width/4, y: self.frame.size.height/4)
    self.addChild(img)

    new_path = viewController.path //UIBezierPath is being returned

    let followPath = SKAction.follow(new_path.cgPath, asOffset: true, orientToPath: false, duration: 5.0)

    img.run(followPath)
}

我试图在自定义视图中绘制一条bezier路径(有点像白板应用程序),然后在我想要为其设置动画时访问bezier路径。路径似乎正确传递。

private var path: UIBezierPath!
let newpath = UIBezierPath()

func initBezierPath() {
    path = UIBezierPath()
    path.lineCapStyle = CGLineCap.round
    path.lineJoinStyle = CGLineJoin.round
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch: AnyObject? = touches.first
    lastPoint = touch!.location(in: self)
    pointCounter = 0
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    let touch: AnyObject? = touches.first
    let newPoint = touch!.location(in: self)

    path.move(to: lastPoint)
    path.addLine(to: newPoint)
    lastPoint = newPoint

    pointCounter += 1

    if pointCounter == pointLimit {
        pointCounter = 0
        renderToImage()
        setNeedsDisplay()
        newpath.append(path)
        path.removeAllPoints()            
    }
    else {
        setNeedsDisplay()
    }        
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
    pointCounter = 0
    renderToImage()
    setNeedsDisplay()
    newpath.append(path)
    path.removeAllPoints()
}

0 个答案:

没有答案