Подтвердить что ты не робот

Как сделать камеру следующей SKNode в комплекте Sprite?

Я хочу иметь фон неподвижный с разными объектами (спрайты и другие объекты).

Игрок будет представлен центром node, который будет перемещаться по всему миру. Я хочу, чтобы моя камера была прикреплена к центральному node, например. мир должен двигаться, и камера должна оставаться неподвижной.

Как мне это достичь?

4b9b3361

Ответ 1

Что-то вроде этого должно помочь. Я вызываю следующее из my didSimulatePhysics.

-(void)centerOnNode:(SKNode*)node {
    CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];
    cameraPositionInScene.x = 0;
    node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y);
}

Ответ 2

Я понимаю, что это похоже на ответ Стюарта Уэлша; однако я хотел бы сделать его хороший ответ более полным.

В принципе, Apple рекомендует создать "мир" node, чтобы содержать все ваши другие узлы, когда мир был ребенком реальной сцены; и далее, что вы создаете "камеру" node как ребенок мира node.

Затем, с вашей сцены, вы можете сделать что-то вроде:

[self centerOnCameraNamed:myCameraName];

Какой вызов вызывает метод (также в вашей сцене):

- (void)centerOnCameraNamed:(NSString*)cameraName
{
  SKNode* world = [self childNodeWithName:worldName];
  SKNode* camera = [world childNodeWithName:cameraName];
  CGPoint cameraPositionInScene = [camera.scene convertPoint:camera.position fromNode:world];
  world.position = CGPointMake(world.position.x - cameraPositionInScene.x, world.position.y - cameraPositionInScene.y);
}

Ответ 3

Новый SKCameraNode кажется очень простым способом сделать это.

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCameraNode/

Просто

1) создать SKCameraNode

// properties of scene class
let cam = SKCameraNode()
let player = SKSpriteNode()

2) добавьте его в свойство вашей камеры.

// In your scene, for instance didMoveToView
self.camera = cam

3) сделайте камеру, следуя положениям вашего игрока.

override func update(currentTime: CFTimeInterval)
{
    /* Called before each frame is rendered */
    cam.position = player.position
}

Ответ 4

let cam = SKCameraNode()
var player: SKSpriteNode?

override func didMoveToView(view: SKView) {
    /* Setup your scene here */
    self.camera = cam
    player = SKSpriteNode(imageNamed: "Player")
    if player?.position != nil {
        player!.position = CGPoint(x: size.width / 2, y: size.height - 150)
        self.addChild(player!)
    }
    player?.addChild(cam)
}

Ответ 5

Существует несколько способов сделать камеру следующей SKNode. Это зависит от предпочтительного типа прокрутки.

  • Камера жестко прикреплена (как в стрелках)
  • Камера для вертикальной или горизонтальной прокрутки (например, в платформерах)

Камера может быть жестко привязана, добавив ее в качестве дочернего node игрока:

let player = SKNode()
let camera = SKCameraNode()

override func didMove(to view: SKView) {
      addChild(player)
      player.addChild(camera)
}

Важно отметить, что положение камеры должно быть исправлено после завершения всех обновлений физики. В противном случае экран может дрожать, если игрок или другой объект, за которым следит камера, движется с большой скоростью. Это зависит от порядка обновления узлов сцены и положения камеры в ieararchy. Чтобы избежать этого эффекта, необходимо обновить положение камеры в методе didSimulatePhysics:

let player = SKNode()
let camera = SKCameraNode()

override func didMove(to view: SKView) {
      addChild(player)
      addChild(camera)
}

// Vertical scrolling, moving only in y-axis
override func didSimulatePhysics() {
    camera.position.y = player.position.y
}

// Horizontal scrolling, moving only in x-axis
// override func didSimulatePhysics() {
//    camera.position.x = player.position.x
// }