gpt4 book ai didi

swift - 关闭整个屏幕的触摸,SpriteKit,怎么样?

转载 作者:行者123 更新时间:2023-11-28 10:16:32 26 4
gpt4 key购买 nike

我正在尝试暂时禁用整个屏幕上的触摸,尽管屏幕上有许多带有 touchesBegun 的 Sprite 。

我想,显然是错误的,关闭场景的触摸就可以了:

    scene?.isUserInteractionEnabled = false

但是那没有用,所以我试了这个,也没有用:

    view?.scene?.isUserInteractionEnabled = false

那也没有用,所以我也从场景内部尝试了这个:

    self.isUserInteractionEnabled = false

最佳答案

没有关闭触摸的全局方法,绘制队列顶部的是第一响应者。

您需要遍历场景中的所有节点并将它们关闭:

enumerateChildNodesWithName("//*", usingBlock: 
{ (node, stop) -> Void in
node.isUserInteractionEnabled = false
})

现在的问题是重新打开它们,如果你使用这种方法,你会为所有的东西打开它,所以你可能想为你所有的可触摸 Sprite 采用一个命名约定

enumerateChildNodesWithName("//touchable", usingBlock: 
{ (node, stop) -> Void in
node.isUserInteractionEnabled = true
})

这将查找名称以 touchable 开头的任何节点。

此方法涉及递归,因此如果您有大量节点,它可能会很慢。相反,您应该使用替代方法:

let disableTouchNode = SKSpriteNode(color:SKColor(red:0.0,green:0.0,blue:0.0,alpha:0.1),size:self.size)
disableTouchNode.isUserinteractionEnabled = true
disableTouchNode.zPosition = 99999
self.addChild(disableTouchNode)

它所做的是在场景大小的所有元素之上放置一个几乎透明的节点。这样当用户触摸屏幕时,这个节点将吸收它而不是其他任何东西。

关于swift - 关闭整个屏幕的触摸,SpriteKit,怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40639820/

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