我正在开发一款iOS游戏,其中'玩家'会在波浪上移动。它应该能够在波浪上跳跃并着陆。 在当前版本中,它会跳跃但不会向下移动。
当平台不移动时它确实有效,但移动平台对应用程序至关重要。
谢谢,伙计们!
代码
平台'characterBaseline'正在基于此功能移动
wave.bar.position.y = CGFloat(Double(wave.bar.position.y) + createSinWave(angle))
func createSinWave(angle:Double) -> Double {
var sinWave = sin(angle)
return sinWave
}
玩家的跳跃和移动基于以下功能
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
if self.onGround {
self.velocityY = -14.0
self.onGround = false
}
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
if self.velocityY < -7.0 {
self.velocityY = -7.0
}
}
override func update(currentTime: NSTimeInterval) {
// Character op wave
self.character.position.y = CGFloat(Double(self.character.position.y) + createSinWave(angle))
self.characterBaseline = self.character.position.y
// Jump
self.velocityY += self.gravity
self.character.position.y -= velocityY
if self.character.position.y < self.characterBaseline {
self.character.position.y = self.characterBaseline
velocityY = 0.0
self.onGround = true
}
// Golf
updateWaveBarPosition()
}
答案 0 :(得分:1)
你会想知道self.gravity设置为什么以及touchesEnded之后出现什么velocityY,这很可能是你问题的根源
在旁注中,您没有使用内置物理的任何理由?
使用SpriteKit的本机物理引擎创建跳跃动作非常容易。
你只需要为每个精灵(玩家和平台)添加一个物理实体
self.player.physicsBody = SKPhysicsBody(bodyWithRectangleOfSize:self.player.size)
一旦发生这种情况,你可以在touchesBegan中运行类似的东西:
self.player.physicsBody.applyImpulse(0, 100)
这会给你的玩家提升100(你可以调整它以适应你希望你的玩家跳得多高)。重力会为你排序休息。