为什么背景图片覆盖了SKCropNode儿童?

时间:2015-07-27 19:26:48

标签: ios swift sprite-kit

我的屏幕上出现蓝色方形图像。此外,一个黄色的球在这个广场的中间产生,并在左边动画。黄色球在离开正方形时会被切断,同时它会向左侧动画(因为我使用了SKCropNode)。

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

P.S。 - 当我取消注释后台代码时,我知道蓝色方块是因为我在触摸该区域时打印出节点的名称。在取消注释代码时无法看到它。

    /* 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))

1 个答案:

答案 0 :(得分:3)

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

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

  

节点的全局Z =节点的Z +父节点的Z +父节点的父节点的Z + ...

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