将相机对准角色

Centering the camera on the character

我是初学者,我已经开始了我的第一个项目。这应该是一个可以 运行 向左向右移动的小游戏。但是我不知道怎么设置相机。

如果你能帮助我,我将不胜感激,请告诉我如何改进我的代码以及哪里出了问题。

这是我的代码:

import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

var ground:SKSpriteNode = SKSpriteNode()
var hero: MPCharacter!
var tree:MPTree!

override func didMoveToView(view: SKView) {

    backgroundColor = UIColor(red: 155.0/255.0, green: 201.0/255.0, blue: 244.0/255.0, alpha: 1.0)
    self.anchorPoint = CGPointMake(0.5, 0.5)

    // --> hero <--
    hero = MPCharacter()
    hero.position = CGPointMake(frame.size.width/2, view.frame.size.height/2)
    hero.zPosition = 100
    hero.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(hero.size.width, hero.size.height))
    hero.physicsBody!.dynamic = true

    addChild(hero)

    // --> ground <--
    ground = SKSpriteNode(imageNamed: "ground")
    ground.size = CGSizeMake(frame.size.width, frame.size.height/3)
    ground.position = CGPointMake(frame.size.width/2, frame.size.height/2 - ground.size.height)

    ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(frame.size.width, ground.size.height - 25))
    ground.physicsBody!.dynamic = false

    addChild(ground)

    // --> Tree <--
    tree = MPTree()
    tree.position = CGPointMake(frame.size.width/2, ground.size.height + tree.size.height/3 - 10)
    tree.zPosition = 10

    tree.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(tree.size.width, tree.size.height - 10))
    tree.physicsBody!.dynamic = false

    addChild(tree)

    // --> Physics <--
    self.physicsWorld.gravity = CGVectorMake(0, -5.0)
    self.physicsWorld.contactDelegate = self

}

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    for touch:AnyObject in touches {

        let location = touch.locationInNode(self)

        if location.x < CGRectGetMidX(self.frame) {
            hero.physicsBody!.velocity = CGVectorMake(0, 0)
            hero.physicsBody!.applyImpulse(CGVectorMake(-5, 10))
        }
        else {
            hero.physicsBody!.velocity = CGVectorMake(0, 0)
            hero.physicsBody!.applyImpulse(CGVectorMake(5, 10))
        }
    }
  }
}

我不太确定你想要达到什么目的。使角色 'run' 向左(或向右)的一种方法是在角色 运行 向右时将背景(和其他游戏对象)向左移动(反之亦然)。这样您的角色将始终位于屏幕中央,因为他并没有真正移动,您可以创建一个 'illusion' 他在您的游戏世界中移动。给你的角色一个 运行 动画会让它看起来更好......

Ray Wenderlich 的网站上有一个教程,其中还包括 'parallax scrolling': http://www.raywenderlich.com/49625/sprite-kit-tutorial-space-shooter

希望这对您有所帮助..

如果您试图将相机对准播放器,Apple 文档为您提供了一个很好的示例来说明如何做到这一点 over here(我会添加代码,但最好的学习方法是获取你的手脏了)。您可能必须将这些方法转换为 swift,但这是您希望执行的操作的一般实现。上述答案的问题在于,如果您要移动背景,则必须直接计算力和冲量并将反向量应用于背景。与简单地移动相机相比,这可能需要更多的处理。希望这对您有所帮助!!