gpt4 book ai didi

ios - 如何给 Sprite 准确的触摸位置?

转载 作者:行者123 更新时间:2023-12-01 15:42:50 25 4
gpt4 key购买 nike

我的问题是

当我触摸黑色箭头区域时,我仍然触摸整个画面,但当我仅触摸红色区域时,我只想触摸并执行操作。我试图给 spriteNode plane = childNode(withName: "play") 起个名字,但它会获取/触摸所有图像帧,而不仅仅是 alphaBody。

red and black areas

我在谷歌上做了一些搜索,但没有得到肯定的结果。

非常感谢。

最佳答案

一个非常简单的解决方案可能是将 HitTest 区域放在您的平面对象上(为了示例,我将它们留得略微红色,但您可以将它们设为透明)。我在编辑器中创建了我的平面类并将其作为引用拖到我的场景中,但您也可以轻松地从头开始对命中区域进行编程。

enter image description here

然后在您的平面类中将它们添加到平面中并检测平面类本身内的触摸。这并不准确,但与您的图片中的 alpha 追踪相距不远。

此方法的一个好处是您可以将此触摸隔离到平面区域。一些用途可能是...

  • 触摸左/右翼转向那个方向
  • 触摸 body 加油
  • 触摸翅膀换枪

这是我在 Plane 类中使用的代码

class Plane: SKSpriteNode {

private var background: SKSpriteNode!
private var wingsHitTest: SKSpriteNode!
private var bodyHitTest: SKSpriteNode!
private var smallWingsHitTest: SKSpriteNode!

init() {

super.init(texture: nil, color: .clear, size: CGSize.zero)
}

required init?(coder aDecoder: NSCoder) {

super.init(coder: aDecoder)
setup()
}

func setup() {

isUserInteractionEnabled = true
self.color = .clear

if let background = self.childNode(withName: "//background") as? SKSpriteNode {
self.background = background
}

if let wingsHitTest = self.childNode(withName: "//wingsHitTest") as? SKSpriteNode {
self.wingsHitTest = wingsHitTest
}

if let bodyHitTest = self.childNode(withName: "//bodyHitTest") as? SKSpriteNode {
self.bodyHitTest = bodyHitTest
}

if let smallWingsHitTest = self.childNode(withName: "//smallWingsHitTest") as? SKSpriteNode {
self.smallWingsHitTest = smallWingsHitTest
}
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

if let touch = touches.first as UITouch? {

let touchLocation = touch.location(in: self)

if wingsHitTest.contains(touchLocation) {
print("hit in the wings")
}
else if smallWingsHitTest.contains(touchLocation) {
print("hit in the back wings")
}
else if bodyHitTest.contains(touchLocation) {
print("hit in the body")
}
}
}
}

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

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