当世界是物理身体时,如何将世界置于中心位置?

时间:2015-08-14 19:30:19

标签: xcode swift 2d-games skphysicsbody

我所有的精灵都是世界上的儿童节点。我希望相机以我的角色(这是世界的一员)为中心,所以我将我的角色位置输入到这个函数中,然后移动世界,使角色再次居中:

func centerWorldOnPosition(position: CGPoint) {
    world.position = CGPoint(x: -position.x + CGRectGetMidX(frame),
        y: -position.y + CGRectGetMidY(frame))
}

然而,当我后来给我的角色一个物理体时,这导致了一个抖动图像,因为该角色正在通过phsics模拟和centerWorldOnPosition函数移动,因为它是世界的子节点。 centerworldOnPosition函数干扰了物理模拟

为了解决这个问题,我尝试通过给它一个物理体来移动我的世界,这样运动只会在物理模拟中通过将centerWorldOnPositionFunction改变为你在下面看到的内容来实现。我有一个问题,因为物理身体不具备相当于:

    world.position = CGPoint(x: -position.x + CGRectGetMidX(frame),
        y: -position.y + CGRectGetMidY(frame))

那么您建议如何解决这个问题呢?这是我试过的。我发现这个世界跟我的角色有些不同,但是我的角色并不靠近中心,有时会离开屏幕,有时世界会逃跑。使用速度似乎没有cgpoints的单位。

func centerWorldOnPosition(position: CGPoint) {


    let disired_position = CGPoint(x: -position.x + CGRectGetMidX(frame),
        y: -position.y + CGRectGetMidY(frame))

    let vectorOfChange = CGVector(dx: disired_position.x - world.position.x, dy: disired_position.y - world.position.y)

    world.physicsBody!.velocity = vectorOfChange


}

1 个答案:

答案 0 :(得分:0)

https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Actions/Actions.html

以世界为中心的代码必须位于didFinishUpdate

override func didFinishUpdate() {
            centerWorldOnPosition(devilfish.position)
}