我正在学习SpriteKit,作为一个例子,我试图在场景中添加几个带有标签的SKSpriteNode
。以下是我的节点图的外观(代码示例如下):
Scene
|
+-- SpriteNode1
| |
| +-- SpriteNode2
| +-- LabelNode1
|
+-- SpriteNode2
|
+-- SpriteNode3
+-- LabelNode2
根据documentation from Apple SpriteKit应该渲染SpriteNode1,然后是它的子节点,然后是SpriteNode2然后它的子节点。但是,我得到的渲染结果清楚地显示SKLabelNode
s在其他元素之后呈现,因此SpriteNode1
中的标签重叠了SpriteNode2
中的标签。
我试图实现的是绘制一张带有文字的简单扑克牌。
以下是渲染结果:
这是一段代码:
-(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];
}
答案 0 :(得分:4)
在视图控制器中检查
skView.ignoresSiblingOrder = false
你可以设置
sprite.zPosition=1
手动控制绘制精灵的顺序。