如何使物体跳跃并降落在移动平台上
How to make an object jump and land on a moving platform
我正在制作跳投 iOS 游戏,其中 'player' 会在波浪中移动。它应该能够跳跃并降落在波浪上。 在当前版本中,它会跳跃但不会向下移动。
它在平台不移动的情况下确实有效,但移动平台对应用程序至关重要。
谢谢大家!
代码
平台'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()
}
您需要了解 self.gravity 的设置以及在 touchesEnded 之后出现的 velocityY 是什么,这很可能是您问题的根源
附带说明一下,您不使用内置物理的原因是什么?
使用 SpriteKit 的原生物理引擎创建跳跃动作非常容易。
你只需要为每个精灵(玩家和平台)添加一个物理体
self.player.physicsBody = SKPhysicsBody(bodyWithRectangleOfSize:self.player.size)
一旦发生这种情况,您就可以 运行 在 touchesBegan 中执行类似的操作:
self.player.physicsBody.applyImpulse(0, 100)
这会给您的玩家带来 100 的提升(您可以调整它以适合您希望玩家跳多高)。 Gravity 会为您解决剩下的问题。
我正在制作跳投 iOS 游戏,其中 'player' 会在波浪中移动。它应该能够跳跃并降落在波浪上。 在当前版本中,它会跳跃但不会向下移动。
它在平台不移动的情况下确实有效,但移动平台对应用程序至关重要。
谢谢大家!
代码
平台'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()
}
您需要了解 self.gravity 的设置以及在 touchesEnded 之后出现的 velocityY 是什么,这很可能是您问题的根源
附带说明一下,您不使用内置物理的原因是什么?
使用 SpriteKit 的原生物理引擎创建跳跃动作非常容易。
你只需要为每个精灵(玩家和平台)添加一个物理体
self.player.physicsBody = SKPhysicsBody(bodyWithRectangleOfSize:self.player.size)
一旦发生这种情况,您就可以 运行 在 touchesBegan 中执行类似的操作:
self.player.physicsBody.applyImpulse(0, 100)
这会给您的玩家带来 100 的提升(您可以调整它以适合您希望玩家跳多高)。 Gravity 会为您解决剩下的问题。