如何在swift中获得连续触摸的初始位置

时间:2016-07-25 19:38:31

标签: swift sprite-kit multi-touch uitouch

我在Swift中构建我的第一个游戏并且我想执行一个代码块,只有当触摸开始在某个区域之外时才会将精灵放在我的手指触摸位置显示。这种触摸可能是连续的,也可能不是连续的,因此它可能会或可能不会连续生成新的精灵,所以我的逻辑在touchesMoved。现在我正在使用

for touch : AnyObject in touches {
    let location = touch.locationInNode(self)
    ...

抓住每个触摸位置。然而,这似乎是不断更新的,我不确定如何引用一个特定的触摸及其起点(假设多个手指一次下降)。我调查了UITouch phase,特别是touchEnded,看看我是否可以通过其他方式解决我的问题,但我甚至无法弄清楚如何访问{{1}使用Apple Docs进行触摸。 (这似乎不起作用:phase

我认为我还从根本上误解了如何处理多个触摸事件以及如何在它们之间传递信息(touch.phase == UITouchPhase.EndedtouchesBegantouchesMoved)。 我可能会遗漏一些明显的东西,但是我很惊讶文档做了一个看似很差的工作解释,并且在网上关于这个问题似乎没有很多好的答案。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

要回答有关如何传递属于第一次触摸的值的问题: 在您的原始课程中创建一个变量

var initialPosition = CGPoint()

在touches中开始将触摸位置分配给initialPosition

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        let location = touch.location(in: self)
        originalPosition = location
    }
}

在touchesMoved中,您现在可以使用第一次触摸的位置。