【问题标题】:Confusing reversed touch event in SwiftSwift中令人困惑的反向触摸事件
【发布时间】:2016-12-15 20:09:24
【问题描述】:

在我的功能中

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?){
    for touch in touches{
        let touchLocation = touch.location(in: self.view)
        print("X: \(touchLocation.x) Y: \(touchLocation.y)")
    }
}

我得到了反转的 Y 值。如果我点击顶部,我会得到 ~0 的价值,如果我点击底部,我会得到高价值。这使我的精灵在移动时朝错误的 Y 方向移动。

但是,如果我删除 self.view 中的“.view”,它会正常工作。有谁知道为什么我使用 self.view 时它会反转?

【问题讨论】:

  • self的类型是什么?
  • @dan 这是一个 SKView...
  • 这是由于 UIKit 和 SpriteKit 的坐标系之间的差异而发生的。 UIKit 的左上角有 0,0。因此,正如 OP 已经发现的那样,仅使用 self(这是一个场景)将按预期工作。
  • @kraken108 嘿伙计,你的疑惑解决了吗?

标签: ios swift sprite-kit touchesbegan


【解决方案1】:

正如Whirlwind 在您的问题下方的评论中所解释的那样,发生这种情况是因为self 您表示SKScene(SpriteKit)和self.view 您使用SKViewUIView 子类所以 UIKit 系统) :

iOSUIKit坐标系的原点位于绘图区域的左上角,正值从它向下和向右延伸。

SpriteKit 坐标系在 iOSOS X 上使用相同的坐标系,原点 (0,0) 在下方-left 角,右上角的 (1334,750) 坐标。

【讨论】:

  • SpriteKit 更改了 sks 文件的默认大小,不再是 1024,768 现在是 750,1334
  • @Knight0fDragon 谢谢先生,我还不知道这个重要信息
猜你喜欢
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2022-01-21
  • 2022-01-17
  • 2018-02-26
相关资源
最近更新 更多