-(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。
有人能指出我正确的方向吗?
答案 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
的父母是self
。 playerName
的父级是outlineBox
。由于您尚未调整outlineBox
上的任何转化,因此它似乎与self
相关。
请注意,您不应将SKNode
称为view
。他们没有。