Я сделал платформенную игру и указал камеру на главный узел Player.Камера Sprite Kit на узле
Я прошел через документ Apple, который можно найти здесь: Apple
Есть около 6 платформ, с self.frame.size.height/4.5
пространства между ними, которые должны респауном каждого раза они находятся под dy = -15
на верхней части экрана, опять же, чтобы сделать его бесконечным циклом.
У меня есть узел Игрока, который получает импульс каждый раз при касании экрана (Игрок прыгает вверх и вниз). Вся игра движется только на y-Axis
.
Камера, которую я создал, ориентирована на Игрока, каждый раз, когда Игрок прыгает с платформы и движется вверх. Однако это только вид, а не позиция реального мира. Это означает, что данные позиции в SpawnPlatforms
всегда одинаковы, потому что они не перемещаются, только вид, который придерживается игрока, перемещается вверх и вниз.
Я хочу иметь камеру на моем Игровом узле, который перемещается по оси Y, и, пока она идет дальше, Платформы также должны двигаться вниз, на данный момент меняется только представление, и я не могу работать с обновленным: метод для обновления платформ. Как я могу это изменить?
Редактировать: Я получил мой код работает с обновлением в Update:Method
, но это еще не ответ на мой первоначальный вопрос, как переместить весь мир с камерой, а не только камеры.
override func didMoveToView(view: SKView) {
/* Setup your scene here */
self.physicsWorld.contactDelegate = self
self.anchorPoint = CGPoint(x: 0, y: 0.30)
backgroundColor = SKColor(red: 81.0/255.0, green: 192.0/255.0, blue: 201.0/255.0, alpha: 1.0)
self.World = SKNode()
self.World.name = "World"
addChild(World)
self.Camera = SKNode()
self.Camera.name = "Camera"
self.World.addChild(Camera)
SpawnPlatforms()
SpawnPlayer()
}
func SpawnPlatforms() {
Platform0 = SKSpriteNode (color: SKColor.greenColor(), size: CGSize(width: self.frame.size.width , height: 25))
Platform0.position = CGPoint(x: self.frame.size.width/2, y: -36)
Platform0.zPosition = 1
Platform0.physicsBody = SKPhysicsBody(rectangleOfSize:Platform0.size)
Platform0.physicsBody?.dynamic = false
Platform0.physicsBody?.allowsRotation = false
Platform0.physicsBody?.restitution = 0
Platform0.physicsBody?.usesPreciseCollisionDetection = true
Platform0.physicsBody?.categoryBitMask = Platform0Category
Platform0.physicsBody?.collisionBitMask = PlayerCategory
Platform0.physicsBody?.contactTestBitMask = PlayerCategory
World.addChild(Platform0)
....//Same code for the other Platforms1-5
}
func SpawnPlayer(){
Player = SKSpriteNode (imageNamed: "Image.png")
Player.size = CGSize(width: 64, height: 64)
Player.position = CGPoint(x: self.frame.size.width/2, y: 0)
Player.zPosition = 2
Player.physicsBody = SKPhysicsBody(rectangleOfSize:CGSize(width: 35, height: 50))
Player.physicsBody?.dynamic = true
Player.physicsBody?.allowsRotation = false
Player.physicsBody?.restitution = 0
Player.physicsBody?.usesPreciseCollisionDetection = true
Player.physicsBody?.categoryBitMask = PlayerCategory
Player.physicsBody?.collisionBitMask = Platform0Category
Player.physicsBody?.contactTestBitMask = Platform0Category | Platform1Category | Platform2Category | Platform3Category | Platform4Category | Platform5Category
World.addChild(Player)
}
override func didSimulatePhysics() {
Camera.position = CGPoint(x: Player.position.x, y: Player.position.y)
self.centerOnNode(Camera!)
}
func centerOnNode(node: SKNode) {
let cameraPositionInScene: CGPoint = Camera.scene!.convertPoint(Camera.position, fromNode: World)
World.runAction(SKAction.moveTo(CGPoint(x:World.position.x , y:World.position.y - cameraPositionInScene.y), duration: 1.0))
}
override func update(currentTime: CFTimeInterval) {
/* Called before each frame is rendered */
if(Player.position.y > (Platform3.position.y + 30) && Player.position.y < Platform4.position.y){
Platform1.position = CGPointMake(self.frame.size.width/2, Platform6.position.y + self.frame.size.height/4.5)
Platform1.color = SKColor.redColor()
}
...//Same code for the other Platforms1-5
}
Ваш вопрос немного неясен. Просьба уточнить более подробно. – sangony
Я отредактировал свое оригинальное сообщение, надеюсь, что он станет более ясным. – Albert
Вы пробовали прочитать это сообщение? http://stackoverflow.com/questions/20828655/how-to-make-camera-follow-sknode-in-sprite-kit –