【问题标题】:iOS7 Sprite Kit how to disable touches on a sprite to make it "tap through"?iOS7 Sprite Kit 如何禁用对精灵的触摸以使其“点击”?
【发布时间】:2013-12-27 05:31:37
【问题描述】:

我知道对于传统的 UIViews,我可以将“启用用户交互”标志设置为 NO,视图将不再响应触摸,让其下方的视图接收触摸。

有没有办法在 Sprite Kit 中实现相同的“点击”功能?到目前为止,我只看到有人使用“Touches started”,在这一点上得到要点并询问场景中的节点。

这种方法的问题是 - 如果我想在精灵顶部添加叠加层(如怪物生命值等),它们也会响应触摸。到目前为止,我试图通过为不同的节点创建自定义类来避免这个问题,然后有一个非常大的 if 语句,检查每个节点的类。

有没有更好的方法来实现 sprite kit 的“点按”功能?

【问题讨论】:

  • 你能设置node.userInteractionEnabled = NO;吗?

标签: ios iphone objective-c sprite-kit user-interaction


【解决方案1】:

如果您在子类 SKSpriteNode 上将 userInteractionEnabled 属性设置为 YES,则触摸代理将在该类中调用。因此,您可以在其类中处理精灵的触摸。

但是,默认情况下,userInteractionEnabled 属性设置为 NO。因此,默认情况下,对精灵的触摸是“点按”。

因此,对于您想要的叠加层,为精灵创建自定义类,在该类中实现 touchesBegan: 和其他委托,并在初始化时将 userInteractionEnabled 属性设置为 YES

【讨论】:

  • 我希望我可以多次投票,这让我的生活变得更轻松
  • @akashg - 这里有同样的问题,我不确定这是如何解决的。我有一个场景(userInteractionEnabled = NO),其中包含一个自定义精灵,偶尔覆盖(userInteractionEnabled = NO)会经过它。自定义精灵可以很好地听到敲击声,直到覆盖在它上面,然后他们什么也听不到。如何让水龙头穿过覆盖层到下面的精灵?谢谢!
  • @wanderlust - 它取决于节点树。因为覆盖层的 userInteractionEnabled 属性设置为 NO,所以点击会被覆盖层的父节点拦截,依此类推,直到节点交互。在这里,我猜父母是场景。您必须在场景的触摸代表中实现一些功能,将触摸“移交”到位于触摸点上的节点。
  • 这正是我所经历的。我希望有更简单的方法。谢谢@akashg。
  • 是否可以在 Scene AND SpriteNode 中接收触摸事件?我正在尝试构建一个 UI,其中效果由精灵子类处理,导航逻辑由场景处理。
【解决方案2】:

Sprite Kit 仅使用 zPosition 值来确定命中测试和绘制顺序。

因此,如果您不想击中它们,可以将所有精灵设置为高于 0。然后一个简单的逻辑测试是 zPostion>0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多