Могу ли я разместить дочерний спрайт ниже его родителя, используя zPosition

Я добавляю спрайт родителю, и он появляется на экране. Однако, несмотря на мой параметр zPosition, ребенок находится поверх своего родителя. Мне нужно получить его, как определено в zPosition.

Он будет размещен правильно, если просто добавить спрайт к себе, а не как дочерний элемент к «hjNode».

Текущий результат заключается в том, что дочерний узел d5Node размещается над hjNode (родительским).

ZPosition работает среди добавленных дочерних элементов при добавлении дополнительных дочерних элементов.

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

Кто-нибудь знает, возможно ли это?

-(id)initWithSize:(CGSize)size {    
if (self = [super initWithSize:size]) {


    self.userInteractionEnabled = YES;

    SKSpriteNode *hjNode = [SKSpriteNode spriteNodeWithImageNamed:@"Hj"];
    hjNode.position = CGPointMake(150, 300);
    hjNode.zPosition = 100;
    hjNode.name = @"hjNode";
    [self addChild:hjNode];

    SKSpriteNode *d5Node = [SKSpriteNode spriteNodeWithImageNamed:@"D5"];
    //d5Node.position = CGPointMake(170, 320);
    d5Node.position = CGPointMake(-10, -20);
    d5Node.zPosition = 1;
    d5Node.name = @"d5Node";
    [hjNode addChild:d5Node];
}
return self;
} 

person PeterK    schedule 04.10.2013    source источник


Ответы (3)


Это должно быть возможно, но даже если это не так, есть лучшее решение, которое даст вам большую гибкость в долгосрочной перспективе.

Вместо добавления двух дочерних спрайтов к узлу спрайтов создайте обычный SKNode и добавьте к нему все три спрайта в качестве дочерних. Таким образом, вы можете свободно переставлять их по своему усмотрению, в то время как все три будут следовать изменениям положения их родительского узла.

person LearnCocos2D    schedule 04.10.2013

Чтобы добавить к этому, если вы хотите сделать это первоначальным описанным способом, вы должны дать детям отрицательное значение zPosition.

Согласно Руководству по программированию SpriteKit, zPosition детей относительно высоты родителя. Из вопроса d5Node на самом деле имеет zPosition = 101, а не 1. Установка zPosition = -1 приведет к zPosition 99.

person Tony    schedule 28.12.2013
comment
Это должен быть принятый ответ, он по теме и быстро. - person Dvole; 11.04.2014

Дети всегда на высоте своих родителей (правда в жизни и в Sprite!).

ZPosition относится только к дочерним элементам в пределах одного узла. Поэтому вы должны добавить Hj и D5 к тому же узлу, к которому вы добавляете родителя; чтобы включить zPosition родителя относительно двух других узлов.

Как предположил LearnCocos2D, было бы проще ввести дополнительный узел (однако LearnCocos2D подразумевал, что исходный код будет работать, но это не так).

person Howard Lovatt    schedule 10.03.2015