In meinem Spiel ist die Kamera auf den Helden zentriert, aber nur in der x-Achse. Die Kamera (die Szene) bewegt sich mit ihm, wenn er sich nach links oder rechts bewegt, bleibt aber gleich, wenn er springt.Spritekit - Szene über Sprite über einer bestimmten Höhe zentriert halten
kann das Setup einfach so wiedergegeben werden:
import SpriteKit
class GameScene: SKScene {
let ship = SKSpriteNode(imageNamed: "Spaceship")
let ground = SKShapeNode(rectOfSize: CGSizeMake(600, 30))
let world = SKNode()
override func didMoveToView(view: SKView) {
self.anchorPoint = CGPointMake(0.5, 0.5)
self.ship.setScale(0.2)
self.ship.physicsBody = SKPhysicsBody(circleOfRadius: self.ship.size.width/2)
self.ground.position = CGPointMake(0, -200)
self.ground.fillColor = SKColor.redColor()
self.ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(600, 30))
self.ground.physicsBody?.dynamic = false
world.addChild(self.ship)
world.addChild(self.ground)
self.addChild(world)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.ship.physicsBody?.applyImpulse(CGVectorMake(0, 60))
}
override func didFinishUpdate() {
let cameraPositionInScene = self.convertPoint(self.ship.position, fromNode: world)
// the position is updated only in the x axis
self.world.position = CGPointMake(self.world.position.x - cameraPositionInScene.x,
self.world.position.y)
}
}
Allerdings habe ich die Kamera in der y-Achse bewegen mag, wenn der Held eine bestimmte Höhe erreicht hat (so dass er höher ging weiter zu falls ein Level "in den Wolken" steigt.
Ich habe versucht, die Position Update in der didFinishUpdate() Funktion auf diese Veränderung: ab einer bestimmten Höhe nach dem Schiff
if self.ship.position.y > 100 {
self.world.position = CGPointMake(self.world.position.x - cameraPositionInScene.x,
self.world.position.y - cameraPositionInScene.y)
} else {
self.world.position = CGPointMake(self.world.position.x - cameraPositionInScene.x,
self.world.position.y)
}
Und es tatsächlich beginnt, aber nie geht vollständig zurück in seine ursprüngliche Position, und ich konnte nicht herausfinden, warum.
Ich weiß, das hilft nicht mit dieser Frage, aber haben Sie in SKCameraNode untersucht? Es könnte Ihr Problem als Nebeneffekt lösen. – CloakedEddy