ios - 为什么背景图像覆盖了 SKCropNode child ?

标签 ios swift sprite-kit

我有一个蓝色的方形图像出现在屏幕上。此外,一个黄色的球会在这个正方形的中间生成并向左移动。黄色球在离开正方形时被切断,同时它应该向左移动(我使用 SKCropNode 的原因)。

我注意到,一旦我取消注释背景场景代码,背景就是你所看到的,因为它覆盖了整个屏幕。我认为更改 zPosition 会解决问题,但事实并非如此。有什么建议吗?

附言- 当我取消注释背景代码时我知道蓝色方 block 在那里,因为当我触摸那个区域时我打印出了节点的名称。只是在取消注释代码时看不到它。

    /* Add Background To Scene
    var bg = SKSpriteNode(imageNamed: "bg")
    bg.zPosition = 1
    bg.position = CGPointMake( CGRectGetMidX (self.frame), CGRectGetMidY (self.frame));
    bg.name = "bg"
    self.addChild(bg)
    */

    var blue = SKSpriteNode(imageNamed: "blueSquare")
    blue.zPosition = 3
    blue.name = "blue"

    var yellow1 = SKSpriteNode(imageNamed: "yellow") 
    yellow1.zPosition = 4 
    yellow1.name = "yellow"

    var mask = SKSpriteNode(color: SKColor.blackColor(), size: CGSizeMake(100, 100))
    var cropNode = SKCropNode()

    cropNode.addChild(blue)
    cropNode.addChild(yellow1) 
    cropNode.maskNode = mask
    self.addChild(cropNode)
    cropNode.position = CGPointMake( CGRectGetMidX (self.frame), CGRectGetMidY (self.frame));

    yellow1.runAction(SKAction.moveByX(-300, y: 0, duration: 2.0))

最佳答案

简短的回答是,如果您设置 cropNode.zPosition = 2,裁剪节点的子节点将出现在背景节点上方。

长答案是如果 view.ignoresSiblingOrder = true(默认),节点的绘制顺序由其全局 zPosition 决定,其中

node's global Z = node's Z + parent's Z + parent's parent's Z + ...

但是,这似乎不适用于 SKCropNode。看起来 Sprite Kit 只使用裁剪节点子节点的 zPosition 来确定绘制它们的相对顺序,裁剪节点的 zPosition 确定全局 Z。

关于ios - 为什么背景图像覆盖了 SKCropNode child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31661607/

相关文章:

ios - 基于 if 语句的函数最佳实践

ios - 如何快速创建动态 View ?

ios - myView.bounds.size 对所有屏幕尺寸返回相同的值

ios - 从文档 URL 加载 PDF

ios - 调整 SKShapeNode 框架的大小,或替代

swift - 如何让一个节点一接触就消失

ios - 进入后台时AVAudioSession问题

ios - XCTAssertEqualObjects 我可以检查两个接受的值吗?

ios - 从模态 ViewController 呈现 UIImagePickerController

ios - 将 iOS 10 中的 "prefs"URL 方案与 LSApplicationWorkspace 一起使用