gpt4 book ai didi

ios - 如何获得 SKShapeNode 的准确触摸位置?

转载 作者:行者123 更新时间:2023-11-30 12:36:08 24 4
gpt4 key购买 nike

如果形状是矩形,则触摸位置正好正确。但如果形状包含透明区域(如下面的三角形),当用户点击透明区域(屏幕上的空白区域)时,触摸也是有效的。

enter image description here

当屏幕上有很多形状时,用户可能点击了正确的位置,但却得到了错误的形状。例如,如果用户想要选择绿色三角形并点击红点,但所选形状将是粉红色三角形,因为粉红色三角形的 zPosition 高于绿色三角形,并且触摸位置位于粉红色三角形的透明区域内。

enter image description here

以下是开始时创建形状的代码:

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
}
}
}
}

现在,点击颜色区域即可创建和移动形状。问题是,点击具有上部透明区域的形状可能会得到错误的形状,正如我上面所解释的。

我写的代码正确吗?还有其他解决方案可以获得准确的位置吗?

谢谢。

最佳答案

我相信您在这里滥用了形状节点:您正在尝试对三角形进行操作,同时为其选择矩形形状。如果您想要一个三角形,那么您需要使用适当的路径,而不是通用的矩形。一旦用三角形表示三角形,触摸位置检测就会自动修复。

关于ios - 如何获得 SKShapeNode 的准确触摸位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42856537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com