8

我正在向父级添加一个精灵,它显示在屏幕上。然而,尽管我的 zPosition 参数,孩子是在它的父母之上。我需要按照 zPosition 中的定义来获取它。

如果只是将精灵添加到 self 而不是作为子项添加到“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;
} 
4

3 回答 3

29

除此之外,如果你想按照描述的原始方式来做,你会给孩子一个负的 zPosition。

根据SpriteKit Programming Guide,孩子的 zPosition 是相对于父母的高度。从问题来看,d5Node 实际上有一个 zPosition = 101 而不是 1。设置 zPosition = -1 将导致 zPosition 为 99。

于 2013-12-28T01:54:16.937 回答
9

这应该是可能的,但即使不是这样,从长远来看,也有更好的解决方案可以为您提供更大的灵活性。

不要将两个子精灵添加到精灵节点,而是创建一个常规 SKNode 并将所有三个精灵都添加为它的子节点。这样您就可以自由地以您认为合适的任何方式重新排列它们,而所有三个都将跟随其父节点的位置变化。

于 2013-10-04T17:10:22.580 回答
-1

孩子总是在他们的父母之上(在生活和雪碧中都是如此!)。

zPosition 仅相对于同一节点内的子节点。因此,您必须将 Hj 和 D5 添加到与添加父节点相同的节点;使父节点的 zPosition 相对于其他两个节点。

正如 LearnCocos2D 所建议的那样,引入一个额外的节点可能更容易(但是 LearnCocos2D 暗示原始代码可以工作 - 它不会)。

于 2015-03-10T06:52:22.123 回答