SpriteKit场景在操场上未正确定向

时间:2019-01-04 22:32:59

标签: swift swift-playground

我正在尝试构建一个简单的游乐场来演示GridWorld ML概念。它由一个12个精灵正方形的简单场景组成,它们作为一个表格堆叠在一起。它在Xcode模拟器中可以正常工作,但在我iPad上的Playgrounds应用中,场景大多从屏幕开始,然后在代码运行时逐渐调整大小和重新定位,直到最终将其放置在正确的位置。

我尝试更改视图框架的大小,为场景创建一个较小的视图。这些更改不能解决问题,但可以更改场景在帧中的缩放比例,直到最终弹出正确大小为止。

最初,场景创建是通过覆盖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

我希望这组框会以创建时定义的尺寸出现在视图框架内。视框与场景框之间似乎存在一些不匹配,因为它们主要从视框的底部开始并在不同比例的缩放之间反弹,直到最终正确设置为止。矩形彼此保持正确的方向,只是不与视框对齐。

0 个答案:

没有答案