swift - 如何快速获取连续触摸的初始位置

标签 swift sprite-kit multi-touch uitouch

我正在用 Swift 构建我的第一个游戏,我想执行一个代码块,将 Sprite 放置在我的手指触摸位置 - 仅当触摸在显示屏的特定区域之外开始时。这种触摸可能是连续的,也可能不是连续的,因此它可能会也可能不会连续生成新的 Sprite ,所以我的逻辑是touchesMoved 。现在我正在使用

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

抓取每个触摸位置。然而,这似乎在不断更新,我不确定如何引用一个特定的触摸及其起点(假设一次有多个手指按下)。我调查了UITouch phase ,具体来说touchEnded ,看看我是否可以找到其他方法来解决我的问题,但我什至不知道如何访问 phase使用 Apple 文档进行触摸。 (这似乎不起作用:touch.phase == UITouchPhase.Ended

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

最佳答案

回答如何传递属于第一次触摸的值的问题: 在原始类中创建一个变量

var initialPosition = CGPoint()

在touchesBegan中将触摸位置分配给initialPosition

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

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

关于swift - 如何快速获取连续触摸的初始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38576075/

相关文章:

ios - Swift 框架可以引用另一个 Swift 框架的类扩展吗?

ios - 在 iOS 中,如何根据环境(dev、hom、prod)更改启动屏幕图像?

swift - 插页式广告 SpriteKit

iphone - 如何确定多点触控场景中最后一次触摸的x&y?

ios - 定期在 UITextField 触发方法

ios - 如何在 iOS 8 中测试 http 请求?

ios - 优化代码物理

swift - 如何统一填充 SKShapeNode

wpf - 多点触控 ScrollViewer 吃触控事件

javascript - 触摸事件touchleave和touchenter是否存在?