当世界是物理体时,如何使世界居中?
How to centre world on position when world is physics body?
我所有的精灵都是世界的子节点。我希望相机以我的角色(它是世界的一员)为中心,所以我将我的角色位置输入此函数并移动世界,以便角色再次居中:
func centerWorldOnPosition(position: CGPoint) {
world.position = CGPoint(x: -position.x + CGRectGetMidX(frame),
y: -position.y + CGRectGetMidY(frame))
}
然而,当我后来给我的角色一个物理体时,这导致了抖动图像,因为角色被物理模拟和 centerWorldOnPosition 函数移动,因为它是世界的一个子节点。 centerworldOnPosition 函数干扰了物理模拟
为了解决这个问题,我试图通过给它一个物理体来移动我的世界,这样运动只会发生在物理模拟中,方法是将 centerWorldOnPositionFunction 更改为您在下面看到的内容。我有一个问题,因为物理体没有等同于:
world.position = CGPoint(x: -position.x + CGRectGetMidX(frame),
y: -position.y + CGRectGetMidY(frame))
那么你有什么建议来解决这个问题。这就是我尝试过的。我发现世界在某种程度上跟随我的角色,但我的角色不在中心附近,有时会离开屏幕,有时世界会 运行 远离。 using velocity好像没有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
}
使世界居中的代码必须位于 didFinishUpdate
override func didFinishUpdate() {
centerWorldOnPosition(devilfish.position)
}
我所有的精灵都是世界的子节点。我希望相机以我的角色(它是世界的一员)为中心,所以我将我的角色位置输入此函数并移动世界,以便角色再次居中:
func centerWorldOnPosition(position: CGPoint) {
world.position = CGPoint(x: -position.x + CGRectGetMidX(frame),
y: -position.y + CGRectGetMidY(frame))
}
然而,当我后来给我的角色一个物理体时,这导致了抖动图像,因为角色被物理模拟和 centerWorldOnPosition 函数移动,因为它是世界的一个子节点。 centerworldOnPosition 函数干扰了物理模拟
为了解决这个问题,我试图通过给它一个物理体来移动我的世界,这样运动只会发生在物理模拟中,方法是将 centerWorldOnPositionFunction 更改为您在下面看到的内容。我有一个问题,因为物理体没有等同于:
world.position = CGPoint(x: -position.x + CGRectGetMidX(frame),
y: -position.y + CGRectGetMidY(frame))
那么你有什么建议来解决这个问题。这就是我尝试过的。我发现世界在某种程度上跟随我的角色,但我的角色不在中心附近,有时会离开屏幕,有时世界会 运行 远离。 using velocity好像没有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
}
使世界居中的代码必须位于 didFinishUpdate
override func didFinishUpdate() {
centerWorldOnPosition(devilfish.position)
}