【问题标题】:Detect object proximity to walls检测靠近墙壁的物体
【发布时间】:2018-04-10 13:05:55
【问题描述】:

我正在尝试编写一些非常简单的东西——并在这个实例上使用 SpriteKit。 我在其他平台上的做法是让一个看不见的孩子“坚持”一点。通过检测不可见的“棍子”之间的碰撞,我可以判断物体是否靠近墙壁。 我正在尝试使用 SpriteKit 复制相同的内容。当然,我更希望有一个看不见的“光束”从物体中射出并给我距离——但这可能太麻烦了。

我会用任何方法来改进我目前完成的愚蠢项目。

My Project so far

谢谢。

【问题讨论】:

  • 天哪,它是一个 mac 项目 :) 我也这样做

标签: swift sprite-kit collision proximity


【解决方案1】:

这是我想出的不涉及物理的东西......

拖动鼠标移动汽车,中心的标签会更新,告诉您到最近墙壁的距离。释放鼠标重置汽车。

非常简单的示例,可以更新以提供更准确的测量结果。

class GameScene: SKScene {


  let car = SKSpriteNode(color: .blue, size: CGSize(width: 50, height: 100))
  let label = SKLabelNode(text: "")


  func findNearestWall() -> CGFloat {

    // you can make this more advanced by using the CGPoint of the frame borders of the car, or even 6+ points for more accuracy

    let closestX: CGFloat = {

      if car.position.x < 0 { // left wall
        return abs(frame.minX - car.position.x)
      } else { // right wall
        return abs(frame.maxX - car.position.x)
      }
    }()

    let closestY: CGFloat = {
      if car.position.y < 0 { // bottom wall
        return abs(frame.minY - car.position.y)
      } else { // top wall
        return abs(frame.maxY - car.position.y)
      }
    }()

    if closestX < closestY {
      return closestX.rounded() // as closest wall distance
    } else {
      return closestY.rounded() // as closest wall distance
    }
  }


  override func didMove(to view: SKView) {
    removeAllChildren()
    label.fontSize *= 2
    addChild(car)
    addChild(label)
  }

  override func mouseDown(with event: NSEvent) {
  }

  override func mouseDragged(with event: NSEvent) {
    let location = event.location(in: self)
    car.position = location
  }

  override func mouseUp(with event: NSEvent) {
    car.position = CGPoint.zero
  }

  override func didEvaluateActions() {
    label.text = String(describing: findNearestWall())
  }
}

【讨论】:

  • 那很棒,但我需要一个向量 - 它将传递给 AI。它需要是从汽车或任何其他对象中出来的预定义向量。计算距离相当容易,我会这样做 - 如果这就是我所需要的。
  • @GregJaskiewicz 我很困惑。您能否详细说明您的问题,也许用图表?
  • 当然。想象一下,您从正方形中画出 4 条线——在任一方向与中心成 15 度和 30 度。类似于我在附加到这个问题的项目中尝试的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 2014-08-14
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多