SpriteNode 位置与触摸位置

SpriteNode position versus touch location

所以我正在使用带有图像的 spritenode,但我没有设置它的位置。有趣的是,我在设置它的位置时遇到了问题,所以我没有,它默认设置为页面中心(出于明显的原因),这最终是完美的。所以现在在我的 touchesbegan 方法中,如果原始图像被按下,我希望更改所述图像,所以我正在检查触摸的位置是否等于节点(图像)的位置。然后,如果这是真的,我将其替换为名为 "nowaves" 的新图像。

    for touch in touches
    {
        let location = touch.location(in: self)
        if (location == audioPlaying.position)
        {
            audioPlaying = SKSpriteNode(imageNamed: "nowaves")
        }

        else
        {

你们认为我需要阅读它吗?好吧,正如我所要求的,我测试了它没有结果。这是我试过的:

    audioPlaying.size = CGSize(width: frame.size.width / 13, height: frame.size.height / 20)
    addChild(audioPlaying)

如果有人知道问题出在哪里,我希望得到一些反馈,谢谢 :D

默认情况下,position 属性 returns 节点的中心坐标。换句话说,除非您触摸精灵的确切中心,否则 if (location == audioPlaying.position) 永远不会为真。但是,您应该知道触摸节点的确切中心点实际上是不可能的。

所以我们用另一种方法。我们只需要检查触摸到的节点是不是你想要的节点即可。

let touchedNode = self.nodes(at: touch.location(in: self)).first
if touchedNode == audioPlaying {
    // I think setting the texture is more suitable here, instead of creating a new node.
    audioPlaying.texture = SKTexture(imageNamed: "nowaves")
}

要添加到@sweeper, 我的所有初始图像内容都在 scenedidLoad 方法中,而不是我创建了一个新方法,我已经将其用于另一个功能来启动游戏,并将初始图像放在那里,现在一切正常。