swift - 分组 SpriteKit 节点和 zPosition 控件
问题描述
我正在使用 SpriteKit。对于具有多个 SKSpriteNode 部分的字符,我想控制每个字符的节点重叠。
例如,字符由音符和部分顺序组成,如下所示。由于addChild
是从上往下依次完成,所以头部在外观上显示在最上面(因为偶尔会塌陷,是zPosition强制的)
Body (z = 100)
Leg (z = +1)
Hand (z = +2)
Head (z = +3)
如果它与其他字符重叠,我们将对其进行处理,以便在下面的 2D 屏幕上有一个深度。
HumanA.zPosition = -humanA.position.y
HumanB.zPosition = -humanB.position.y
在 , 的情况下humanA.position.y=-101
,humanB.position.y=-100
humanB 在 humanA 之前。但是humanA的头部(z = -98)在humanB的腿之前(z = -99)。
理想情况下,如果humanB在humanA之前,我想让humanB的所有部分都在humanA之前。
请帮我。
参考站点 https://developer.apple.com/documentation/spritekit/sknode
谢谢你。
解决方案
只需将 y 位置乘以人体部位的数量:4
HumanA.zPosition = -humanA.position.y * 4
HumanB.zPosition = -humanB.position.y * 4
这边走:
- 人体可能有以下 z 位置:0, 4, 8, 12, 16, ...
- 人的腿可能有以下 z 位置:1, 5, 9, 13, 17, ...
- 人的手可能有以下 z 位置:2、6、10、14、18、...
- 人头可能有以下 z 位置:3, 7, 11, 15, 19, ...
因此,一个人的整个部分将始终以相同的深度显示。
推荐阅读
- java - 从操作栏菜单项单击调用活动
- javascript - React-js 如何触发“BeforeInstallPromptEvent”以启动“弹出”添加到主屏幕
- node.js - NodeJS 使用回调来等待 foreach 的结束
- c# - 如何制作 NLog 的 JsonLayout 输出对象类型?
- php - 如何在 Eloquent 的日期时间列的时间上使用聚合函数?
- python - 如何将不带引号的字符串以及带有数组和子字典的字符串转换为python中的字典?
- fancytree - 如何点击选定的 FancyTree 节点再次激活?
- python - pandas autocorr 可以处理不规则的采样时间序列数据吗?
- javascript - 返回值中的传播运算符错误,解析错误
- r - 使用 dplyr 根据列值创建组 (group_by)