【发布时间】:2013-10-22 07:10:24
【问题描述】:
我放置了一个精灵 A(子类化以接收命中(userInteractionEnabled 为 YES)),然后放置一个不接受命中的普通精灵 B(userInteractionEnabled 默认为 NO),完全覆盖精灵 A。
点击精灵 B,我假设精灵 A 会得到触摸,但没有任何反应。文档中关于此事的部分如下。
我觉得这里有些不清楚,因为精灵 B 似乎仍然接收到触摸但将其丢弃。 或者,spriteA 已从可能的触摸接收器中移除,因为它不可见。
对于在命中测试期间要考虑的节点,其 userInteractionEnabled 属性必须设置为 YES。默认值 对于除场景节点之外的任何节点都为 NO。想要接收的节点 事件需要从其实现适当的响应者方法 父类(iOS 上的 UIResponder 和 OS X 上的 NSResponder)。这是一 您必须在其中实现特定于平台的代码的少数几个地方 雪碧套件
无论如何要解决这个问题? 只要某些东西的 userInteractionEnabled 为 NO,它就不会干扰其他触摸接收器。
更新:即使将精灵 B 的 alpha 设置为 0.2,使精灵 A 非常可见,也不会使精灵 A 可触摸。尽管没有启用交互,Sprite B 只是完全“吞下”了触摸。
【问题讨论】:
-
我也有同样的问题。如果覆盖精灵隐藏 = YES,问题甚至存在。它必须是一个错误。如果我在场景中只创建一个可触摸的 SKSpriteNode,然后将其隐藏 = YES,同样的事情,它仍然会接收触摸。我正在考虑向 Apple 提交错误报告,但我的最后一个甚至没有得到任何回应,所以我对此并不感到兴奋。
-
我绝对认为你应该提交错误报告。在我的日子里,我只提交了几个。它们中的大多数都作为重复文件关闭,但为了记录,他们修复了其中一个(iPad 的方向问题,应该从 iOS5 开始修复;^))。当然,对错误报告的响应可能需要几个月甚至更长时间,但仍然值得,因为这不会自行改变。
-
确实如此。我会归档的。谢谢你的灵感!与使用 Cocos2D 相比,SpriteKit 中的错误令人讨厌的是,在新的 SpriteKit 版本中修复某些内容对用户提出了新的要求,即拥有最新版本的操作系统……而不是仅仅将其包含在新版本的应用程序。
-
是的。使用 cocos2d,您可以随时编辑源代码以满足您的需求。开源的力量。 Sprite Kit 无法做到这一点。你所能做的就是提交错误报告,或者做一些丑陋的变通方法。这是我认为 cocos2d 在这一点上应该强调的地方:开放性和快速的 bug 修复、平台兼容性(超越苹果)。因为可以肯定,从现在开始,Sprite Kit 会很强大。
-
iOS 8 中仍未修复