相对于它们的父级定位精灵

Positioning sprites relative to their parent

-(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.

谁能指出我正确的方向?

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

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

A rectangle, relative to the node’s origin.

你的outlineBox不是"centered"而是parent。

outlineBox 的 parent 是 selfplayerName 的 parent 是 outlineBox。由于您没有在 outlineBox 上调整任何变换,因此它看起来好像是相对于 self.

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