【问题标题】:How to centre world on position when world is physics body?当世界是物理物体时,如何以位置为中心?
【发布时间】:2015-08-14 19:30:18
【问题描述】:

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

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


}

【问题讨论】:

  • 似乎物理物体没有这种能力,而且速度单位显然是未知的,(它们肯定不是米每秒,因为加速度是牛顿在文档中说明的)。

标签: xcode swift 2d-games skphysicsbody


【解决方案1】:

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

将世界居中的代码必须位于 didFinishUpdate 中

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多