2节点精灵套件的异步移动

Asynchronous moving of 2 nodes sprite kit

我有 2 个节点,我想用 2 个手指在 iPad 上异步抓取。这是移动代码:

var ninjaMoving = false
var monsterMoving = false

var loc = CGPoint(x: 0.0, y: 0.0)
var prevLoc = CGPoint(x: 0.0, y: 0.0)

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    for touch in (touches as! Set<UITouch>) {
        let location = touch.locationInNode(self)
        if !self.nodesAtPoint(location).isEmpty && (self.nodeAtPoint(location).physicsBody?.categoryBitMask == 1 || self.nodeAtPoint(location).physicsBody?.categoryBitMask == 3) {
            if self.nodeAtPoint(location).physicsBody?.categoryBitMask == 1 {
                ninjaMoving = true
            }
            else if self.nodeAtPoint(location).physicsBody?.categoryBitMask == 3 {
                monsterMoving = true
            }
        }
    }
}

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    for touch in touches as! Set<UITouch> {
        loc = touch.locationInNode(self)
        prevLoc = touch.previousLocationInNode(self)
    }
}

override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
    for touch in touches as! Set<UITouch> {
        let location = touch.locationInNode(self)
        if self.nodeAtPoint(prevLoc).physicsBody?.categoryBitMask == 1 {
            ninjaMoving = false
        }
        if self.nodeAtPoint(prevLoc).physicsBody?.categoryBitMask == 3 {
            monsterMoving = false
        }
    }
}

override func update(currentTime: CFTimeInterval) {
    if ninjaMoving {
        var x = playerNinja.position.x + (loc.x - prevLoc.x)
        var y = playerNinja.position.y + (loc.y - prevLoc.y)
        x = max(x, playerNinja.size.width / 2)
        x = min(x, size.width / 2 - playerNinja.size.width)
        y = max(y, playerNinja.size.height / 2)
        y = min(y, size.height - playerNinja.size.height / 2)

        playerNinja.position = CGPointMake(x, y)
    }
    if monsterMoving {
        var x = playerMonster.position.x + (loc.x - prevLoc.x)
        var y = playerMonster.position.y + (loc.y - prevLoc.y)
        x = max(x, self.size.width / 2 + playerMonster.size.width)
        x = min(x, size.width - playerMonster.size.width / 2)
        y = max(y, playerMonster.size.height / 2)
        y = min(y, size.height - playerMonster.size.height / 2)

        playerMonster.position = CGPointMake(x, y)

    }
}

但是我不能同时将一个精灵向左移动,另一个向右移动。在 sprite kit 中有什么方法可以做到这一点吗?

请检查此问题的答案:multitouch in spritekit

我们的想法是您应该分别跟踪各个触摸。