Сцена SpriteKit не ориентирована должным образом на детской площадке - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь построить простую игровую площадку, чтобы продемонстрировать концепцию GridWorld ML. Он состоит из простой сцены из 12 квадратов спрайтов, сложенных в виде таблицы. Он отлично работает в симуляторе Xcode, но в приложении Playgrounds на моем iPad сцена начинается в основном за пределами экрана, а затем постепенно изменяет размеры и перемещает положение, пока код работает, пока он, наконец, не окажется в нужном месте.

Я попытался изменить размер рамки просмотра, создав меньший вид для сцены. Эти изменения не устранили проблему, но изменили масштаб сцены в кадре до тех пор, пока она наконец не достигла правильного размера.

Первоначально создание сцены было выполнено путем переопределения sceneDidLoad. Я изменил его, чтобы переопределить init, но результаты были такими же.

import SpriteKit
import PlaygroundSupport

<snip>

class Map {

<snip code generating map values>
}

class MapGraphic:SKScene {

let blockSize = 75
var rectangleGroup:[SKShapeNode] = [SKShapeNode]()
var updateReady:Bool = false
var map:Map = Map()

//    var map:Map

// Initialize objects during first start
override func sceneDidLoad() {
    super.sceneDidLoad()
    //        self.physicsWorld.contactDelegate = self
    var rectangle:SKShapeNode = SKShapeNode(rect: CGRect(x: 0, y:0, width: blockSize, height: blockSize))
    var rect:CGRect = CGRect(x: 0, y:0, width: blockSize, height: blockSize)

    for row in 0..<mHeight {
        for col in 0..<mWidth {
            rect = CGRect(x: col*blockSize, y: (mHeight - row - 1)*blockSize, width: blockSize, height: blockSize)
            rectangle = SKShapeNode(rect: rect)
            let val = map.val(row: row, col: col)

            <snip (code setting rectangle color>
            rectangleGroup.append(rectangle)
            addChild(rectangle)
        }
    }
}

var dt = TimeInterval(0)
var lpCount = 0

override func update(_ currentTime: TimeInterval) {
    super.update(currentTime)

    if (lpCount < MAX_ITER) {
        map.bellman()
        map.update()
        lpCount += 1
    }

        // here we print out the final results
    else if lpCount == MAX_ITER {
        map.mprint()
        lpCount += 1
    }

    for i in 0..<rectangleGroup.count {

        <snip (code setting rectangle color>
        }
        rectangleGroup[i].fillColor = sqColor
    }
    dt = currentTime
    sleep(2)
}

func updateGMap() {
    updateReady = true
}

func setMap(map: Map) {

}
}
let frame = CGRect(x: 0, y: 0, width: 300, height: 225)
var view = SKView(frame: frame)
var gMap = MapGraphic(size: view.frame.size)
view.presentScene(gMap)

PlaygroundPage.current.liveView = view

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

...