【发布时间】:2016-08-31 19:34:21
【问题描述】:
我对 swift 很熟悉,但我已经开始涉足 spritekit。我一直在关注有关创建无尽跑步者的教程。作者采用的方法是创建一个包含所有子节点的单个 SKNode。然后移动该容器节点,而不是单独移动所有子节点。但让我感到困惑的是容器节点没有与之关联的大小,所以我对它的工作原理/原因感到有些困惑,而作者并没有真正解释它。
所以我们有
let containerNode = SKNode()
let thePlayer = Player("image":"player") //SKSpriteNode
let inc = 0
override func didMoveToView(){
self.anchorPoint = CGPointMake(0.5,0)
addChild(containerNode )
containerNode.addChild(player)
moveWorld()
}
func moveWorld(){
let moveWorldAction = SKAction.moveByX(-screenWidth, y:0, duration:6)
let block = SKAction.runBlock(movedWorld)
let seq = SKAction.sequence([moveWorldAction,block])
let repeatAction = SKAction.repeatActionForever(seq)
containerNode.runAction(repeatAction)
}
func movedWorld() {
inc = inc + 1
addObjects()
}
func addObjects() {
let obj = Object()
containerNode.addChild(obj)
let ranX = arc4random_uniform(screenWidth)
let ranY = arc4random_uniform(screenHeight)
obj.position = CGPointMake(screenWidth * (inc + 1) + ranX, ranY)
}
我在上面的代码中省略了一些从 int 到 float 的转换,但对于我想理解的点来说这不是必需的。
我明白为什么在创建新对象时我们会按增量进行倍数,但我不明白的是 containerNode 没有大小,那么为什么它的子节点会显示?这是最有效的方法吗?
我假设这只是为了方便而不是单独移动所有其他对象,但它没有大小的事实让我感到困惑。
【问题讨论】:
-
我喜欢把 SKNodes 想象成宇宙,它在无限膨胀
标签: sprite-kit sknode