如果形状为矩形,则触摸位置完全正确。但如果一个形状包含透明区域(如下面的三角形),当用户点击透明区域(它在屏幕上的空白区域)时,触摸也是有效的。
当屏幕上有许多形状时,用户可能会点击正确的位置但形状不正确。例如,如果用户想要选择绿色三角形并点击红点,但所选形状将是粉红色三角形,因为粉红色三角形的zPosition高于绿色三角形,触摸位置在粉红色三角形内部#39;透明区域。
以下是开始时创建形状的代码:
var touchShapeName:String!
var currShape: SKShapeNode!
var shapeArr = [SKShapeNode]()
创造形状:
for i in 1...count {
let shape = SKShapeNode()
shape.path = petalPath
shape.strokeColor = UIColor(red: 0.9, green: 0.7, blue: 0.1, alpha: 1.0)
shape.lineWidth = 0.1
shape.glowWidth = 0.1
shape.fillColor = UIColor(red: getRandomColor(245, 255), green: getRandomColor(190, 210), blue: getRandomColor(10, 15), alpha: 0.98)
shape.name = "\(i)"
shape.position = CGPoint(x: frame.midX + CGFloat( 30 * i ), y:frame.midY + 60)
addChild(shape)
shapArr.append(shape)
}
我使用以下代码来获取形状:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
let location = touch?.location(in: self)
touchShapeName = self.atPoint(location!).name
if currShape == nil{
for s in shapeArr{
if s.name == touchShapeName{
currShape = s
}
}
}
}
到目前为止,点击颜色区域时可以创建和移动形状。问题是,如上所述,点击具有上部透明区域的形状可能会形成错误的形状。
我是否写了正确的代码?是否有其他解决方案可以获得确切的位置?
THX。
答案 0 :(得分:0)
我相信你在这里滥用了形状节点:你试图在三角形上操作,同时为它选择一个矩形形状。如果你想要一个三角形的形状,那么你需要使用一个合适的路径,而不是通用矩形。一旦用三角形表示三角形,触摸位置检测应自动修复。