迅速。SKSpriteNode 作为按钮

Swift. SKSpriteNode as a button

提问人:Nexus S. 提问时间:9/19/2023 更新时间:9/19/2023 访问量:35

问:

我在游戏中使用 SKSpriteNode 作为按钮。暂停按钮。

例如:

var pauseButton = SKSpriteNode(imageNamed: "pauseButton")

... some settings (size, position and etc.)...

当我单击一个按钮时,会发生一系列特定的操作。此外,单击后,按钮本身将从场景中移除。

    for touch in touches {
            
            let pauseButtonTouch = touch.location(in: self)
            if pauseButton.contains(pauseButtonTouch) {
                
                pauseButton.removeAllActions()
                pauseButton.removeFromParent()

                ... some code...

}

但问题来了。如果单击按钮应位于的位置,则启动按下此按钮时应起作用的功能。虽然节点不在现场。我不明白正在发生的事情的逻辑。请帮我解决问题。如果单击舞台上的远程节点,为什么该节点可以工作?

对不起我的英语...

swift sprite-kit sksprite节点

评论


答:

1赞 Mitul Pokiya 9/19/2023 #1

您描述的行为可能会发生,因为 SpriteKit 中的触摸事件仍然可以检测到触摸,即使节点已从父节点中删除。这可能会导致意外行为。

若要防止此问题,可以添加其他检查,以确保在执行与其相关的代码之前按钮仍然存在。下面是代码的更新版本:

for touch in touches {
    let pauseButtonTouch = touch.location(in: self)
    
    if pauseButton.contains(pauseButtonTouch) {
        // Check if the pauseButton is still a child of the scene
        if pauseButton.parent != nil {
            pauseButton.removeAllActions()
            pauseButton.removeFromParent()
            
            // ... some code ...
        }
    }
}

评论

0赞 Nexus S. 9/20/2023
非常感谢您的帮助。这真的很有帮助。我很感激