2015-10-13 5 views
5

Я не совсем понимаю логику позиционирования дочерних узлов. Допустим, у меня есть прямоугольник. И если я не изменил свою опорную точку, дочерний узел будет отображаться ровно посередине по умолчанию. Но как разместить его на верхнем левом краю прямоугольника, например? Или спуститься? Я попробовалКак разместить дочерние SKSpriteNodes внутри своих родителей

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

Но он не расположен посередине осью Y. Это где-то наверху. Какие инструменты я должен использовать для размещения дочерних узлов в отношении/внутри своих родителей?

+1

Что такое 'eye.size' здесь, предположительно' child' является дочерним узлом 'rect'? – WangYudong

+0

Да, извините, это означало быть 'rect.size.height'. Я отредактировал это – TimurTim

ответ

16

По умолчанию опорная точка в SpriteKit равна (0,5, 0,5), которая является центром узла/спрайта. (0, 0) - нижний левый угол и (1, 1) - верхний правый угол. Посмотрите на this picture.

enter image description here

После выбора точки привязки узла-, вы можете рассматривать его как начало системы координат, диапазон размера кадра узла. Смещение позиции вычисляется/зависит как от базовой точки дочернего элемента, так и от точки привязки родителя.

Например, (красный) родительский узел rect имеет размер (100, 100), а дочерний узел (зеленый) child имеет размер (50, 50). Установите дочернюю позицию в (-25, 25) в системе координат родителя, будет иметь следующий результат.

// 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

Более эксперименты позиции SpriteKit и точки привязки могут быть найдены here.

+0

Спасибо! Теперь мне стало понятнее :) – TimurTim

+0

Какой прекрасный ответ. Хорошее объяснение, пример кода и даже диаграммы. – andrewtweber