2016-09-26 51 views
0
-(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

儘量避免在你的場景中使用視圖座標,使用場景座標,那麼scene.frame.size或scene.size – Knight0fDragon

回答

1

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

按照蘋果文檔https://developer.apple.com/reference/spritekit/skshapenode/1520047-shapenodewithrect?language=objc

矩形,相對節點原點。

你的outlineBox不是「居中」它的父母。

outlineBox的父母是selfplayerName的父母是outlineBox。由於您尚未調整outlineBox上的任何轉換,因此它會顯示爲相對於self

請注意,您不應該將SKNode稱爲view。他們不。

+0

啊,謝謝你的明確解釋。我知道這不是一個觀點。但是,您可以將它的孩子定位爲「視圖」。這通常是我的做法。只是一個簡單的立場補充已經解決了問題。謝謝。 – Daniel

+0

@丹尼爾冷靜,很高興它解決了。我剛纔提到的唯一原因就是它不會讓人們「閱讀」時感到「困惑」。順便說一句,如果這個答案解決了,你應該這樣做,以便人們知道它是這樣的,所以他們不會花時間在它上面。 –