2015-10-13 20 views
5

Non capisco la logica del posizionamento dei nodi figlio. Diciamo che ho un rettangolo. E se non ho cambiato il suo punto di ancoraggio, il nodo figlio apparirà esattamente nel mezzo per impostazione predefinita. Ad esempio, come posizionarlo sul bordo superiore sinistro del rettangolo? O giù a destra? Ho provatoCome posizionare i figli SKSpriteNodes all'interno dei loro genitori

child.zPosition = 1 
child.position.y = rect.size.height/2 
rect.addChild(child) 

Ma non è posizionato nel centro dall'asse Y. È da qualche parte in cima. Quali strumenti dovrei usare per posizionare i nodi figli riguardo/all'interno dei loro genitori?

+1

Che cosa è 'eye.size' qui, presunto' child' è un nodo figlio di 'rect'? – WangYudong

+0

Sì, mi dispiace, significava 'rect.size.height'. Ho modificato quello – TimurTim

risposta

16

Il punto di ancoraggio predefinito in SpriteKit è (0,5, 0,5), che è il centro di un nodo/sprite. (0, 0) è in basso a sinistra e (1, 1) è in alto a destra. Guarda this picture.

enter image description here

Dopo aver scelto il punto di ancoraggio di un nodo, è possibile trattarlo come origine del sistema di coordinate con scala dimensione del frame del nodo. L'offset di posizione viene calcolato/influenzato dal punto di ancoraggio del bambino e dal punto di ancoraggio del genitore.

Ad esempio, un nodo genitore (rosso) rect ha dimensioni (100, 100) e un nodo figlio (verde) child ha dimensioni (50, 50). Imposta la posizione del bambino a (-25, 25) nel sistema di coordinate del genitore avrà il seguente risultato.

// parent node 
let rect = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(100.0, 100.0)) 
rect.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame)); 
self.addChild(rect) 
// child node 
let child = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(50.0, 50.0)) 
child.zPosition = 1 
child.position = CGPointMake(-rect.size.width/4, rect.size.height/4) // (-25, 25)) 
rect.addChild(child) 

enter image description here

Altri esperimenti di posizione SpriteKit e punto di ancoraggio possono essere trovati here.

+0

Grazie! È molto più chiaro per me ora :) – TimurTim

+0

Che bella risposta. Buona spiegazione, esempio di codice e persino diagrammi. – andrewtweber

Problemi correlati