SpriteKit SKCropNode 掩盖一切

Posted

技术标签:

【中文标题】SpriteKit SKCropNode 掩盖一切【英文标题】:SpriteKit SKCropNode Masks everything 【发布时间】:2015-06-08 05:45:21 【问题描述】:

我正在尝试使用 SKCropNode 类屏蔽节点。我在 SKCropNode 继承类中用我自己的 init 方法来做:

- (id)init 
    self = [super init];

    if (self) 
        self.maskNode = [[SKSpriteNode alloc] initWithColor:[SKColor blackColor] size:(CGSize)50,50];
        SKSpriteNode *contentNode = [[SKSpriteNode alloc] initWithImageNamed:@"Spaceship"];
        [self addChild: contentNode];

        self.userInteractionEnabled = YES;
    
    return self;

它按预期工作:

现在,我想使用以下代码为场景和裁剪的宇宙飞船添加背景:

-(void)didMoveToView:(SKView *)view 
    /* Setup your scene here */

    //
    //background
    //
    SKSpriteNode * background = [SKSpriteNode spriteNodeWithImageNamed:@"background_game"];
    background.position = CGPointMake(CGRectGetMidX(view.frame), CGRectGetMidY(view.frame) - CGRectGetMinY(view.frame));

    [self addChild:background];

    TurretCropNode * cropNode = [[TurretCropNode alloc] init];
    cropNode.position = (CGPoint)view.frame.size.width/2,view.frame.size.height/2;
    [self addChild:cropNode];

我刚刚添加了几行并在开头添加了背​​景(裁剪的节点行保持不变)

这是我现在得到的:

这是预期的行为吗?为什么裁剪的宇宙飞船消失了?

【问题讨论】:

【参考方案1】:

我猜如下图是你指定的背景。你检查过你的节点zPosition吗?

如果你想在背景前面显示你的飞船,你必须将zPosition调整为高于背景精灵的值。

【讨论】:

是的,这是个问题。我想如果我将节点添加为子节点,它会根据我添加它们的顺序自动分配 z 位置。谢谢。

以上是关于SpriteKit SKCropNode 掩盖一切的主要内容,如果未能解决你的问题,请参考以下文章

在 Spritekit 中扩展圆形切口过渡效果

当我在层次结构中添加额外的 SKNode 子级时,SKCropNode 失败

Swift SpriteKit反向屏蔽在设备上不起作用,但在Simulator中有效

如何使用 Sprite Kit 创建具有 3D 效果的戒指?

是否可以在 Sprite Kit 中使用圆形(SKShapeNode)作为蒙版?

SKCropNode 将裁剪部分作为 SKSpriteNode