【问题标题】:Detecting nodes on any side of a touched node检测触摸节点任意一侧的节点
【发布时间】:2018-09-20 02:23:41
【问题描述】:

我有一个使用 SceneKit 和 swift 构建的游戏。

havestrugglingfigurehowsolve 我的problem

我试图弄清楚如何在我的特定场景中检测节点接触。下图展示了我面临的问题...如果用户触摸了 任何 个黄色立方体,它将突出显示整个黄色立方体链。底部的三个红色立方体和顶部的两个红色立方体也是如此。

游戏的运作方式是给用户一个立方体形状。形状可以通过用户以各种方式滑动来改变位置。立方体可能会出现或从场景中移除,因此立方体的位置可以轻松更改。最后,当用户滑动形状时,重力功能会将立方体拉到地面上,所以如果他们将下面的图像向右扭转,那么它最终会变成一个全新的形状,大部分立方体都在一个新的位置。

这是我尝试过的:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
      let touch = touches.first!
      let location = touch.location(in: gameView)
      let hitList = gameView.hitTest(location, options: nil)

      if let hitObject = hitList.first {
         let node = hitObject.node

      //This is where I'm trying to detect the nodes and remove them
      gameScene.rootNode.childNodes.filter({ $0.name == node.color }).forEach({ $0.removeFromParentNode() })
   } 
}

我的代码的问题是它删除了 所有 与命中立方体颜色相同的立方体。

【问题讨论】:

  • 反对者愿意发表评论吗?我在问一个非常具体的问题,我提供了最少的完整代码,你觉得什么地方太宽泛了?

标签: ios swift collision-detection scenekit


【解决方案1】:

我不会使用 SceneKit API 来解决这个问题。

您有一个游戏,其中包含可以根据特定约束进行排列的立方体。应用程序应该具有每个立方体所在位置的模型(抽象表示),并且立方体的绘图只是该模型的视图。涉及您的游戏玩法的所有事情,包括解析哪些立方体是相同颜色链的一部分,都应该在该抽象表示上完成,然后对立方体状态的任何更新都应该传播到 SceneKit 节点层次结构。

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    相关资源
    最近更新 更多