SpriteKit标签渲染顺序

时间:2014-11-12 06:32:03

标签: ios objective-c sprite-kit

我正在学习SpriteKit,作为一个例子,我试图在场景中添加几个带有标签的SKSpriteNode。以下是我的节点图的外观(代码示例如下):

Scene | +-- SpriteNode1 | | | +-- SpriteNode2 | +-- LabelNode1 | +-- SpriteNode2 | +-- SpriteNode3 +-- LabelNode2

根据documentation from Apple SpriteKit应该渲染SpriteNode1,然后是它的子节点,然后是SpriteNode2然后它的子节点。但是,我得到的渲染结果清楚地显示SKLabelNode s在其他元素之后呈现,因此SpriteNode1中的标签重叠了SpriteNode2中的标签。

我试图实现的是绘制一张带有文字的简单扑克牌。

以下是渲染结果:

rendering result

这是一段代码:

-(void)didMoveToView:(SKView *)view {

    [self addDummyNodeAt: CGPointMake(500, 500)];
    [self addDummyNodeAt: CGPointMake(550, 520)];
}

-(void)addDummyNodeAt: (CGPoint) point {
    // Create a sprite
    SKSpriteNode* sprite = [[SKSpriteNode alloc] initWithColor:[self getRandomColor] size:CGSizeMake(165, 220)];
    sprite.position = point;
    [self addChild:sprite];

    // Add another color rectangle as a node to a sprite
    SKSpriteNode * testNode = [[SKSpriteNode alloc] initWithColor:[self getRandomColor] size:CGSizeMake(120, 50)];
    testNode.position = CGPointMake(0, 0);
    [sprite addChild: testNode];

    // Add a text
    SKLabelNode *cardLabel = [SKLabelNode labelNodeWithFontNamed:@"Tahoma"];
    cardLabel.text = @"This is a text";
    cardLabel.fontColor = [SKColor blackColor];
    cardLabel.fontSize = 12;
    cardLabel.position = CGPointMake(-22, -70);
    [sprite addChild: cardLabel];
}

-(UIColor*) getRandomColor {
    CGFloat hue = ( arc4random() % 256 / 256.0 );
    CGFloat saturation = ( arc4random() % 128 / 256.0 ) + 0.5;
    CGFloat brightness = ( arc4random() % 128 / 256.0 ) + 0.5;
    return [UIColor colorWithHue:hue saturation:saturation brightness:brightness alpha:1];
}

1 个答案:

答案 0 :(得分:4)

在视图控制器中检查

skView.ignoresSiblingOrder = false

你可以设置

sprite.zPosition=1

手动控制绘制精灵的顺序。