Как кратко контролировать движение spriteNode с помощью пролистывания - PullRequest
0 голосов
/ 29 мая 2019

Я строю игру spriteKit в Xcode 10.2.1 со swift 5, где игрок должен достичь конца большого фона (избегая врагов, препятствий и т. Д.), Чтобы пройти уровень. Камера привязана к позиции игрока spriteNode.x, и игрок может перемещать spriteNode в любом направлении с помощью прокрутки.

Я использую UIPanGestureRecognizer вместе, чтобы включить это движение, и это, кажется, работает достаточно хорошо.

@objc func handlePan(recognizer: UIPanGestureRecognizer) {    
    let transformerX = 1024/self.view!.frame.size.width
    let transformerY = 768/self.view!.frame.size.height
    if recognizer.state == .began {
        lastSwipeBeginningPoint = recognizer.location(in: self.view)
    } else if (recognizer.state == .ended) {
        if scrolling { // this is controlls whether player can be moved - scrolling is set to true once introductory elements have run
            if playerDamage < 4 { //player cannot be controlled and falls off screen if it has 4 damage
                let velocity = recognizer.velocity(in: self.view)
                player.physicsBody?.applyImpulse(CGVector(dx: velocity.x * transformerX / 5.4, dy: velocity.y * transformerY * -1 / 5.4)) //-1 inverts y direction so it moves as expected
             }
         }
     }
}

Это позволяет перемещаться по уровню, но не так точно и под контролем, как хотелось бы. Игрок уходит с заданной скоростью, но дальнейшие удары (для изменения направления / избежания препятствий), похоже, увеличивают скорость и, как правило, затрудняют точное управление. Есть ли способ перекрыть скорость, чтобы она начиналась с заданной скорости, но затем начинала терять импульс, или есть ли вообще лучший способ управления многонаправленным движением?

...