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