如何通过滑动来简洁地控制spriteNode的运动

时间:2019-05-29 12:15:31

标签: ios swift sprite-kit

我在Xcode 10.2.1中用swift 5构建一个spriteKit游戏,玩家必须到达大背景的尽头(避免敌人,障碍物等)才能完成关卡。相机绑定到播放器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
             }
         }
     }
}

这确实允许在水平线上移动,但不能达到我想要的精确和受控的方式。玩家以设定的速度离开,但任何进一步的滑动(改变方向/避开障碍物)似乎都会使速度成倍增加,并且通常难以精确控制。 是否有一种方法可以抑制速度,从而使其以设定的速度开始但又开始失去动量,或者是否有更好的方法来控制多方向运动?

0 个答案:

没有答案