Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SpriteKit不尊重zPosition?_Ios_Iphone_Ipad_Sprite Kit - Fatal编程技术网

Ios SpriteKit不尊重zPosition?

Ios SpriteKit不尊重zPosition?,ios,iphone,ipad,sprite-kit,Ios,Iphone,Ipad,Sprite Kit,addChild和zPosition在场景中到底有什么影响 我的意思是:假设我这样做 sprite1.zPosition = 50; sprite2.zPosition = 10; sprite3.zPosition = 30; 然后再这样做 [self addChild:sprite1]; [self addChild:sprite2]; [self addChild:sprite3]; 根据SpriteKit并考虑zPosition顺序,sprite1应在sprite3上渲染在sprit

addChild和zPosition在场景中到底有什么影响

我的意思是:假设我这样做

sprite1.zPosition = 50;
sprite2.zPosition = 10;
sprite3.zPosition = 30;
然后再这样做

[self addChild:sprite1];
[self addChild:sprite2];
[self addChild:sprite3];
根据SpriteKit并考虑zPosition顺序,sprite1应在sprite3上渲染在sprite2上,但SpriteKit忽略了这一点,并在sprite2上渲染3


我遗漏了什么吗?

如果他们有相同的父母,那将是真的。如果它们可以是不同的父对象,也会考虑父对象的z顺序

场景渲染的标准行为遵循一对简单的规则:

  • 父对象在呈现其子对象之前绘制其内容
  • 子对象按它们在子对象中出现的顺序呈现 数组
  • 考虑z位置时,节点树的渲染方式如下:

  • 计算每个节点的全局z位置
  • 节点按从最小z值到最大z值的顺序绘制
  • 如果两个节点共享相同的z值,则先渲染祖先节点, 和兄弟姐妹按子顺序渲染

  • 您可以在游戏视图控制器中的“了解节点树的绘制顺序”下找到详细的说明,将ignoresSiblingOrder属性设置为false(或在objective-C中设置为NO)


    什么是真的?321还是132?Spritekit忽略zPosition并渲染它,结果应为321.123。正如Jerome所建议的,我们需要更多的代码来提供更好的答案。123?你是说1在上面还是在下面?所以,重要的是addChild订单,而不是zPosition。请阅读我在“此处”下发布的文档。Z位置很重要,但如果两个节点具有相同的Z位置,则会考虑添加顺序。您所经历的是奇怪的,可能是由其他原因造成的。Sprite Kit按将节点添加到父节点的顺序绘制具有相同父节点的所有节点,zPosition会覆盖此顺序。如果节点具有不同的父节点,则zPosition无效。无需更多代码。代码就是这样。3层,3个不同的位置,但按随机顺序添加。SpriteKit应该尊重zPosition,但事实并非如此。尝试在addChild之后而不是之前设置zPosition。这应该不会有什么区别。你能为这种情况做一个测试项目吗?或者只需从
    SKScene
    粘贴整个代码,如果您显示更多代码,然后显示正在发生的与应该发生的屏幕截图,则会有所帮助。
    let skView = self.view as SKView
    skView.ignoresSiblingOrder = false