roo*_*okr 12 ios sprite-kit swift
我试图制作一个简单的应用程序,你触摸一个点,一个精灵跟随一条线穿过该点到屏幕的边缘,无论你在哪里触摸.我想绘制连接精灵的原点(它开始的点)和你触摸的点之间的线段,以及精灵的原点和屏幕边缘的终点之间的线段,这样我就可以看到精灵以及原点,触点和终点的x和y偏移之间的关系.
希望这不是太混乱.
TL; DR:我需要在两点之间画一条线,我不知道如何使用SpriteKit Swift.
提前致谢.
Meh*_*hul 15
这可以使用CGPath和SKShapeNode完成.
让我们从CGPath开始.当我们需要使用一系列形状或线条构造路径时,使用CGPath.路径是连接两个点的线.所以要划一条线:
您可以在此处查看文档:http: //developer.apple.com/library/mac/#documentation/graphicsimaging/Reference/CGPath/Reference/reference.html
你需要做的是:
var path = CGPathCreateMutable()
CGPathMoveToPoint(path, nil, 100, 100)
CGPathAddLineToPoint(path, nil, 500, 500)
Run Code Online (Sandbox Code Playgroud)
现在,为了使路径可见,并为其提供描边颜色,线宽等属性,您可以在SpriteKit中创建一个SKShapeNode并添加路径.
let shape = SKShapeNode()
shape.path = path
shape.strokeColor = UIColor.whiteColor()
shape.lineWidth = 2
addChild(shape)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :).
按照本教程逐步完成,您可以实现这一目标.
考虑以下代码:
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
let location = touches.anyObject()!.locationInNode(scene)
if let pig = movingPig {
pig.addMovingPoint(location)
}
}
Run Code Online (Sandbox Code Playgroud)
这是一种简单的方法.您获得用户手指的下一个位置,如果您发现了一只猪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)
})
Run Code Online (Sandbox Code Playgroud)
你可以看到结果:

绘图线:
目前,只有猪知道它想要旅行的路径,但场景也需要知道这条路来画它.这个问题的解决方案是您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
}
Run Code Online (Sandbox Code Playgroud)
这种绘制猪路径的方法:
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)
}
})
}
Run Code Online (Sandbox Code Playgroud)
这是你的结果:

你可以设置猪的路径.
您可以根据需要进行修改.
希望它会有所帮助.
对于Swift 3,该CGPathMoveToPoint方法不再像nil第二个参数那样,所以我需要一个新的解决方案.这是我想出的:
let line_path:CGMutablePath = CGMutablePath()
line_path.move(to: CGPoint(x:x1, y:y1))
line_path.addLine(to: CGPoint(x:x2, y:y2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7133 次 |
| 最近记录: |