2017-02-10 9 views
0

Я пытаюсь создать простую игру SpriteKit. У меня есть плеер, который начинается с нижней части экрана. Я добавил в свою GameScene камеру, чтобы следить за игроком, но он не работает. когда я запускаю его с этим кодом:SKCameraNode working weird

class GameScene: SKScene { 
    let mPlayer = Player(circleOfRadius: 45, fillColor: myColors.blue, strokeColor: myColors.red) 
    let cameraNode = SKCameraNode() 

    override func didMove(to view: SKView) { 
     setup() 
    } 

    override func update(_ currentTime: TimeInterval) { 
     // Called before each frame is rendered 
     moveCamera() 
     Player.movePlayerUp(mPlayer: mPlayer) 
    } 

    func setup(){ 
     mPlayer.position = CGPoint(x: self.frame.midX - PLAYER_WIDTH, y: self.frame.minY + PLAYER_HEIGHT) 

     self.camera?.position = mPlayer.position 

     self.camera = cameraNode 
     self.addChild(cameraNode) 
     self.addChild(mPlayer) 
    } 

    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 
     for touch in touches{ 
      let location = touch.location(in: self) 
      mPlayer.run(SKAction.moveTo(x: location.x, duration: 0.1)) 
     } 
    } 

    func moveCamera(){ 
     let moveAction = SKAction.moveTo(y: mPlayer.position.y, duration: 0.1) 
     cameraNode.run(moveAction) 
    } 
} 

игрок, начиная с нижнего и немедленно перемещается к центру экрана, как на этой картинке: enter image description here

Как я могу сделать камеру следовать игрока с самого начала и переместить его вверх? Надеюсь, мой вопрос ясен и извините за размер картинки.

ответ

0

Этот код работает для меня в пустом проекте Xcode. Вероятно, вы думаете об этом не потому, что ваше фоновое изображение имеет 1 цвет, и вы только ненадолго перемещаете игрока.

Также в вашем методе обновления вы настроили постоянное перемещение проигрывателя на середину, что необязательно.

Попробуйте добавить некоторые полосы на задний план, чтобы было легче увидеть, перемещаетесь ли вы, и чем добавлять этот код к методу обновления, медленно перемещайте плеер вверх.

let action = SKAction.move(by: CGVector(dx: 0, dy: 5), duration: 1) 
mPlayer.run(action) 

Вы увидите, что фотоаппарат правильно следит за игроком.

Если вам нужно центрировать камеру по-разному на плеере, например на оси y, вам просто нужно увеличить/уменьшить положение y камеры.

let moveAction = SKAction.moveTo(y: mPlayer.position.y + 200, duration: 0.1) 
cameraNode.run(moveAction) 

Надеется, что это помогает

+0

Я пытался добавить свой код, но ничего, кажется, по-другому. Если камера движется, почему фон не медленно «исчезает» со дна, когда игрок движется вверх? – swiftnewbie

+0

Он работает для меня. Я скопировал ваш код в новый игровой проект и просто добавил некоторые полосы на задний план и изменил метод перемещения. Все работает правильно. Ваш фоновый образ или вы установили цвет фона сцены? – crashoverride777

+0

Это цвет фона. Кажется, что работает, но я хочу, чтобы нижняя часть экрана «исчезла», когда игрок поднимается. – swiftnewbie