我目前正在尝试将相机置于SpriteKit中的SKNode上。 在更新功能中,我有以下内容:
override func update(currentTime: NSTimeInterval) {
if self.camera != nil {
self.camera!.position = CGPointMake(CGRectGetMidX(super.frame) / 10, wayPoints.last!.y)
self.centerOnNode(self.camera!)
}
}
这是我的centerOnNode函数:
func centerOnNode(node: SKNode) {
let cameraPositionInScene: CGPoint = node.scene!.convertPoint(node.position, fromNode: node.parent!)
node.parent!.position = CGPoint(x:node.parent!.position.x - cameraPositionInScene.x, y:node.parent!.position.y - cameraPositionInScene.y)
}
这就是Apple建议将相机集中在节点上的方式(请注意,这些都在世界SKNode中)。这种作品;它使相机居中,但它的更新速度不够快。 这会产生以下效果(请注意,在我的情况下,' CGRectGetMidX(super.frame)/ 10'将永远是屏幕的中心,并且' wayPoints.last!.y'将始终是该行顶点的Y位置): http://gyazo.com/95f02f98e5707b0065e74f90ac547139
正如您所看到的那样,相机正在移动,但线条移动速度更快。我不确定为什么会这样,因为相机不应该以与线路相同的速度移动?
修改 我在一个单独的函数中添加/更新wayPoints数组,该函数每0.5秒调用一次:
NSTimer.scheduledTimerWithTimeInterval(0.05, target: self, selector: "addPoint", userInfo: nil, repeats: true)
但即使我在addPoint功能中更新相机位置,仍会出现相同的效果。
答案 0 :(得分:0)
我不确定执行此操作的“正确”方法是什么。但是我将相机节点的速度设置为等于中心节点的速度,并且将相机的位置设置为等于节点的位置。例如:
camera?.position = player!.position
camera?.physicsBody?.velocity = player!.physicsBody!.velocity
为此,您将需要给相机节点一个物理物体。当您这样做时,建议您确保它位于其自身的碰撞,场和接触面罩上。