相对于父母定位精灵

时间:2016-09-26 16:47:18

标签: objective-c sprite-kit position skshapenode sklabelnode

-(void)drawGUIForPlayer:(PlayerClass *)player {

    SKShapeNode *outlineBox = [SKShapeNode shapeNodeWithRect:CGRectMake(0, self.view.frame.size.height - 60, 150, 30)];
    outlineBox.fillColor = [SKColor colorWithRed:0 green:0 blue:1 alpha:0.3];
    outlineBox.strokeColor = [SKColor clearColor];
    [self addChild:outlineBox];

    SKLabelNode *playerName = [SKLabelNode labelNodeWithText:player.name];
    playerName.color = [SKColor colorWithWhite:1 alpha:0.5];
    playerName.fontSize = 10;
    [outlineBox addChild:playerName];
    [playerName setHorizontalAlignmentMode:SKLabelHorizontalAlignmentModeCenter];
    [playerName setVerticalAlignmentMode:SKLabelVerticalAlignmentModeCenter];

}

以前,我会创建一种技术来添加一个框,然后将标签作为框的子项。基本上使盒子成为视图,这样我就可以相对于shapenode定位标签。然而,有了这个,我得到一个0,0的位置,它相对于self.view定位,而不是outlineBox.view。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

我想你可能会误解[SKShapeNode shapeNodeWithRect:CGRectMake(0, self.view.frame.size.height - 60, 150, 30)]正在做什么。

根据Apple文档https://developer.apple.com/reference/spritekit/skshapenode/1520047-shapenodewithrect?language=objc

  

相对于节点原点的矩形。

您的outlineBox不是“居中”的父母。

outlineBox的父母是selfplayerName的父级是outlineBox。由于您尚未调整outlineBox上的任何转化,因此它似乎与self相关。

请注意,您不应将SKNode称为view。他们没有。