【问题标题】:Position of mouse click relative to scene, not window鼠标点击的位置相对于场景,而不是窗口
【发布时间】:2017-03-20 18:29:44
【问题描述】:

在我的游戏中,我需要使用鼠标来选择单位。

但是,我遇到了一些问题,因为我不知道如何获取相对于游戏而不是相对于窗口的点击坐标。

例如,如果 Unit 1 位于游戏的 (0,0) 点,则它可能位于窗口上的任何点,具体取决于我如何平移和缩放窗口,但我希望鼠标单击返回 ( 0,0) 无论我如何移动窗口只要我点击同一个位置。

我现在正在使用:

override func mouseDown(with event: NSEvent) {
    eventPos = event.location(in: self)
    ...
}

(其余代码与鼠标点击位置无关)。

这一切都在 GameScene 中,它是一个 SKScene。那么如何获取鼠标点击相对于 GameScene 的位置呢?

【问题讨论】:

  • eventPos 应该在场景坐标中。您是否使用 SpriteKit 的内置摄像头进行平移/缩放?另外,你有没有试过let selectedUnit = atPoint(eventPos)来选择单位?
  • 我使用的是通过代码制作的相机,它是一个 SKCamera 节点,但不是您通过在游戏场景 SKS 中拖放一个而制作的相机。
  • 平移和缩放是我做的自定义功能。
  • 如果您使用内置的 SpriteKit 相机进行平移/缩放,鼠标位置将在您上面提供的代码的场景坐标中。我还怀疑它会简化您的应用开发工作。

标签: swift sprite-kit mouseevent skscene nsevent


【解决方案1】:

您需要将您的观点从视图转换为场景坐标:

eventPos = view!.convert(event.locationInWindow, to: view!.scene!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多