gpt4 book ai didi

sprite-kit - Spritekit 无尽的 runner parent SKNode

转载 作者:行者123 更新时间:2023-12-03 09:43:00 26 4
gpt4 key购买 nike

我熟悉 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 没有大小,所以为什么它的子节点显示?这是最有效的方法吗?

我假设这只是为了方便而不是单独移动所有其他对象,但它没有大小这一事实让我感到困惑。

最佳答案

由于未呈现 SKNode,因此它不需要(或没有)大小属性。只有可见的 SKNode 子类(SKLabelNodeSKShapeNode 等)需要大小(显式声明或隐式计算)。例如,SpriteKit 需要知 Prop 有 20 x 20 纹理的 SKSpriteNode 的大小才能正确渲染它。您可以使用 SKNodecalculateAccumulatedFrame 方法来确定所有后代(除了其他 SKNode)的总大小(一个矩形)在它的节点树中。

关于sprite-kit - Spritekit 无尽的 runner parent SKNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39257654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com