提问人:Nexus S. 提问时间:9/19/2023 更新时间:9/19/2023 访问量:35
迅速。SKSpriteNode 作为按钮
Swift. SKSpriteNode as a button
问:
我在游戏中使用 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...
}
但问题来了。如果单击按钮应位于的位置,则启动按下此按钮时应起作用的功能。虽然节点不在现场。我不明白正在发生的事情的逻辑。请帮我解决问题。如果单击舞台上的远程节点,为什么该节点可以工作?
对不起我的英语...
答:
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
非常感谢您的帮助。这真的很有帮助。我很感激
评论