按照THIS的教程一步一步来,你就可以做到。
考虑下面的代码:
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
let location = touches.anyObject()!.locationInNode(scene)
if let pig = movingPig {
pig.addMovingPoint(location)
}
}
这是一个简单的方法。您将获得用户手指的下一个位置,如果您在touchesBegan(_:,withEvent:) 中找到一头猪,如非零的movingPig 值所示,则将该位置添加到该猪作为下一个航路点。
到目前为止,您可以为猪存储一条路径——现在让猪遵循这条路径。将以下代码添加到update() 内的GameScene.swift:
dt = currentTime - lastUpdateTime
lastUpdateTime = currentTime
enumerateChildNodesWithName("pig", usingBlock: {node, stop in
let pig = node as Pig
pig.move(self.dt)
})
你可以看到结果:
画线:
目前只有猪知道它要走的路,但场景也需要知道这条路才能画出来。这个问题的解决方案是为您的Pig 类提供一种新方法。
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
}
此方法绘制猪的路径:
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)
}
})
}
这是你的结果:
你可以为猪设置这条路径。
您可以根据需要进行修改。
希望它会有所帮助。