Неправильное позиционирование мира SpriteKit

Я пытаюсь сделать свою первую игру, используя SpriteKit и Swift. Думаю, я понял концепцию World SKNode, но не могу заставить ее работать должным образом.

Я добавляю world:SKNode в качестве дочернего элемента в GameScene. Затем я добавляю 9 дочерних SKSpriteNodes (400px X 400px от начальной точки 200px X 200px, потому что spritesNodes центрированы). И они прекрасно позиционируются, НО я не могу понять, как получить границы моего мира SKNode.

Например, как я могу показать левый нижний угол моего мира?

import SpriteKit

class GameScene: SKScene {
    let cityPartSide:Int = 400
    let startCoord:Int = 200

    var world:SKNode = SKNode()

    override func didMoveToView(view: SKView) {

        //self.world = SKNode()
        self.world.name = "world"
        self.addChild(self.world)
        let map:[[UInt8]] = [[16, 16, 16],
                             [16, 16, 16],
                             [16, 16, 16]]
        drawMap(world, map: map)

    }
    func drawMap(world:SKNode, map:[[UInt8]]) {
        let lineSize:Int = map[0].count
        var lineCounter = map.count
        while lineCounter > 0 {
            lineCounter -= 1
            var elemCounter = 0
            while elemCounter < lineSize {
                var sprite:SKSpriteNode = SKSpriteNode()
                let currentPartNumb = map[lineCounter][elemCounter]
                if currentPartNumb == 0 {
                    elemCounter += 1
                    continue
                } else {
                    sprite = SKSpriteNode(imageNamed: "cell")
                }
                //CHOOSE IMAGE
                sprite.position = CGPoint(x: startCoord + elemCounter * cityPartSide, y: startCoord + ((lineSize-1)-lineCounter)*cityPartSide)
                world.addChild(sprite)
                elemCounter += 1
            }
        }
    }
    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}

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

введите здесь описание изображения


person Nikolay Pryahin    schedule 07.04.2016    source источник
comment
Мне кажется, что вы неправильно обрабатываете масштабирующие факторы, как вы создаете саму сцену? Какой масштабный режим вы используете?   -  person Knight0fDragon    schedule 07.04.2016


Ответы (1)


О, это было довольно легко. мне нужно было добавить это

scene.size = self.view.frame.size

в viewDidLoad GameViewController.swift, как это

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let scene = GameScene(fileNamed:"GameScene") {
            // Configure the view.
            let skView = self.view as! SKView
            skView.showsFPS = true
            skView.showsNodeCount = true

            /* Sprite Kit applies additional optimizations to improve rendering performance */
            skView.ignoresSiblingOrder = true

            /* Set the scale mode to scale to fit the window */
            scene.scaleMode = .AspectFill
            scene.size = self.view.frame.size    //<---HERE
            skView.presentScene(scene)
        }
    }

    //...etc.
person Nikolay Pryahin    schedule 13.04.2016