【问题标题】:Organizing zPosition values in Sprite Kit with enums使用枚举在 Sprite Kit 中组织 zPosition 值
【发布时间】:2014-10-10 08:43:19
【问题描述】:

我们一直在使用枚举来组织精灵的 zPosition。当我们开始在游戏中添加带有多个子精灵的 SKNode 时,结构很快开始崩溃。一些放置在屏幕上的子精灵必须具有负值才能位于其他具有子节点的节点下方。这些负值相对于单独枚举中的其他精灵很难跟踪。

有没有比使用枚举更好的方法来组织精灵的 zPosition(尤其是那些带有子精灵的精灵)?

【问题讨论】:

  • 我个人使用 zPosition 和 enum 并打开 ignoreSiblingOrder 发现没有问题。它比仅仅硬编码数字要好得多。我不太明白你关于负值的观点,这不重要。看来你的问题(我一开始也有这个问题)是你没有提前计划你的游戏的 z 顺序是什么。相反,您在制作游戏时会这样做,这会使事情变得非常困难。首先建立一个可靠的 z 排序系统,使用枚举强制执行它,事情应该会变得更加清晰。
  • 实际上,在详细阅读您的问题后,您似乎正在使用多个枚举来组织您的 z 顺序。我建议对游戏的 z 顺序使用单个枚举。
  • @gfrs 您可以添加您的第二条评论作为答案,以便我将其标记为正确吗?
  • 刚刚做了,很高兴它帮助了你。

标签: ios enums sprite-kit sprite zposition


【解决方案1】:

在阅读更多关于您的问题后,您似乎正在使用多个枚举来组织您的 z 顺序。我建议对游戏的 z 顺序使用单个枚举。

【讨论】:

  • 具体来说,您的评论中的 ignoreSiblingOrder 部分结合单个枚举帮助我解决了我的问题。自己尝试了这些东西,但没有运气。
【解决方案2】:

使用图层来组织您的场景:

- (instancetype)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
        self.view.ignoresSiblingOrder = YES;        
        [self addLayers];
    }
    return self;
}

- (void)addLayers {
    self.backgroundLayer = [SKNode node];
    self.backgroundLayer.zPosition = 100;
    [self addChild:self.backgroundLayer];

    self.playerLayer = [SKNode node];
    self.playerLayer.zPosition = 300;
    [self addChild:self.playerLayer];

    self.enemyLayer = [SKNode node];
    self.enemyLayer.zPosition = 400;
    [self addChild:self.enemyLayer];

    // UI elements must be on top of all nodes on the scene
    self.uiLayer = [SKNode node];
    self.uiLayer.zPosition = 1000;
}

- (void)addBackgrounds {
    SKSpriteNode *backgroundNode1 = [SKSpriteNode spriteNodeWithTexture:[self backgroundTexture1]];
    backgroundNode1.zPosition = 10;
    [self.backgroundLayer addChild:backgroundNode1];

    SKSpriteNode *backgroundNode2 = [SKSpriteNode spriteNodeWithTexture:[self backgroundTexture2]];
    backgroundNode2.zPosition = 20;
    [self.backgroundLayer addChild:backgroundNode2];
}    
.... etc

【讨论】:

  • 虽然我同意将节点组织成层很重要并且通常是必要的,但我相信 OP 在 z 排序方面存在困难,不一定是节点分组。例如,他提到遇到问题的枚举用于 zPosition。你可以很容易地用枚举替换你的硬编码值,它会变得更具可读性和可维护性。
  • 这个想法是给顶层层100200300zPositions。这些层中包含的节点应该得到102030zPositions。他们的子节点应该得到123zPositions。这种方法将消除重叠节点的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多