【发布时间】:2014-07-01 03:24:00
【问题描述】:
我创建了一个 SKShapeNode 并为其提供了一个 CGPath。这是在 didMoveToView 中的 GameScene.swift 中:
let myNode = SKShapeNode()
let lineToDraw = CGPathCreateMutable()
CGPathMoveToPoint(lineToDraw, nil, 0, 0)
CGPathAddLineToPoint(lineToDraw, nil, 87, 120)
myNode.path = lineToDraw
myNode.strokeColor = SKColor.redColor()
myNode.lineWidth = 20
myNode.name = "My Node!"
world.addChild(myNode) // World is a higher-level node in my scene
这就是我在场景中再次检测触摸的方式:
override func touchesEnded(touches: NSSet!, withEvent event: UIEvent!) {
if let touch = touches.anyObject() as? UITouch {
if let shapeNode = nodeAtPoint(touch.locationInNode(self)) as? SKShapeNode {
println("Touched \(shapeNode.name)")
} else {
println("Nothing here")
}
}
}
线节点显示没有问题。但是,它根本没有注册 touchesEnded。
真的,我有三个模糊不清的问题:
有没有更好的方法来创建一个 SKShapeNode,它是两点之间的一条线,而无需调用便利初始化程序?我计划子类化 SKShapeNode 以向节点添加额外的逻辑,并且子类无法访问超类的便利初始化程序。
更重要的是,如何让场景识别那里的线节点并触发 touchesEnded?
-
有没有办法,使用这种机制,我可以让它更“模糊”,所以它处理接近线的触摸,而不是在线?我最终的计划是让它更薄,但我仍然希望有一个大的触摸区。我想如果不出意外,我可以创建两个节点:一个清晰/厚,另一个红色/细,并在清晰的节点上处理触摸事件,但我想知道是否有更好的方法。
李>
【问题讨论】:
标签: swift sprite-kit cgpath skshapenode