我不会把它放在更新代码中,尽量让你的更新部分保持整洁,记住你只有 16ms 可以使用。
而是为您的角色节点创建一个子类,并覆盖位置属性。我们基本上要说的是,如果您的相机距离您的角色 10 像素,请向您的角色移动。我们在动作上使用一个键,这样我们就不会叠加多个动作,并使用一个计时模式来让相机平稳地移动到您的位置,而不是瞬间完成。
class MyCharacter : SKSpriteNode
{
override var position : CGPoint
{
didSet
{
if let scene = self.scene, let camera = scene.camera,(abs(position.y - camera.position.y) > 10)
{
let move = SKAction.move(to: position, duration:0.1)
move.timingMode = .easeInEaseOut
camera.run(move,withKey:"moving")
}
}
}
}
编辑:@Epsilon 提醒我 SKActions 和 SKPhysics 直接访问变量而不是通过存储的属性,所以这不起作用。在这种情况下,请在 didFinishUpdate 方法中执行此操作:
override func didFinishUpdate()
{
//character should be a known property to the class, calling find everytime is too slow
if let character = self.character, let camera = self.camera,(abs(character.position.y - camera.position.y) > 10)
{
let move = SKAction.move(to: character.position, duration:0.1)
move.timingMode = .easeInEaseOut
camera.run(move,withKey:"moving")
}
}