gpt4 book ai didi

ios - SKSpriteNode zPosition绘图?

转载 作者:可可西里 更新时间:2023-11-01 00:56:18 25 4
gpt4 key购买 nike

我正在尝试创建许多相互重叠和隐藏的 Sprite 。

class BubbleNode: SKSpriteNode {

init() {
let texture = SKTexture(imageNamed: "body")
super.init(texture: texture, color: .clear, size: texture.size())

let eye = SKSpriteNode(imageNamed: "eye")
eye.zPosition = 1
eye.position = CGPoint(x: -20, y: 0)

let eye_right = eye.copy() as! SKSpriteNode
eye_right.position = CGPoint(x: 20, y: 0)

let mouth_smiling = SKSpriteNode(imageNamed: "mouth_smiling")
mouth_smiling.zPosition = 1
mouth_smiling.position = CGPoint(x: 0, y: -20)

addChild(eye)
addChild(eye_right)
addChild(mouth_smiling)
}
}

在我看来,子元素的 zPosition 是有道理的。

我像这样添加气泡:

func touchDown(atPoint pos : CGPoint) {
let n = BubbleNode()
n.position = pos
self.addChild(n)
}

所以我希望 sprite 重叠并隐藏不可见的部分。

相反,我首先渲染 body ,然后将眼睛和嘴巴渲染为 sibling :

bubbles' child elements rendered in wrong order

我试图翻转 view.ignoresSiblingOrder 但它没有帮助。

最佳答案

管理 z 顺序可能很棘手。

它的工作方式是 zPosition 是相对于父 zPosition 的,并且在 zPositioning 处只有 1 次传递。

因此,如果您在 zPosition 0 有一张脸,在 zPosition 1 有眼睛,在 zPosition 2 有虹膜,

然后当你去渲染2张脸时,这是绘制的顺序

face 1 --- z0
face 2 ----z0
eye 1 --- z1
eye 2 --- z1
iris 1 ---z3 (because 2 + 1 + 0 is 3)
iris 2 --- z3

最好将面部的所有部分都保留为 0,而只需更改面部本身的 zPosition

face 1 --- z0
eye 1 --- z0
iris 1 ---z0

face 2 ----z1
eye 2 --- z1 (because 1 + 0 is 1)
iris 2 --- z1

现在,如果出于某种原因,您需要添加到面部一部分的 zposition,然后跟踪它以确定 zvalue 范围。然后确保你的脸 zPosition 在 z 深度上相距那么远

face 1 --- z0
eye 1 --- z0
iris 1 ---z1 (depth of 2 z layers)

face 2 ----z2 (make sure we are at 2)
eye 2 --- z2 (because 2 + 0 is 1)
iris 2 --- z2

关于ios - SKSpriteNode zPosition绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204201/

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