【问题标题】:SWIFT: SKSpriteNode setting alpha to 0 vs. removing it from it's parentSWIFT:SKSpriteNode 将 alpha 设置为 0 与将其从其父级中删除
【发布时间】:2015-05-24 00:40:12
【问题描述】:

我有一个问题,我不得不承认,我有点困惑。我必须显示/隐藏一些 SpriteNode(这些是游戏结束时会出现的一些选项按钮)。如果玩家按下重试“按钮”(SpriteNode),则该触摸调用的方法会将其 alpha 设置为零。但有时它仍然处于“活动状态”(意味着 alpha 保持为 1),在其他精灵之后,并且当再次玩游戏并且它前面的节点正在移动并且它变得可见时。这非常令人困惑,并且是一种随机行为,我在想如果将其从其父级(无论如何都是自我)中删除并在必要时再次添加它是处理这种情况的更好方法。 代码如下:

func restartGame()
{
restartButon.alpha = 0
......................
}
if nodeAtPoint(location).name == "someName"
{
restartGame()
}

值得一提的是,这个按钮的外观是由 SKAction.fadeAlphaTo(1,1.5) 制作的,它最初的 alpha 在 didMoveToView() 覆盖方法中设置为 0。 谢谢。

【问题讨论】:

    标签: swift sprite-kit skspritenode


    【解决方案1】:

    如果您仍然看到它,这显然意味着您的程序中的某些东西正在将 alpha 设置为 1。

    为什么不直接将节点的hidden 属性设置为true?这将隐藏它。

    一般来说,如果这是针对不总是显示的 UI 元素,最好通过可以包含所有 UI 元素的父节点来控制这些部分。例如,您可以有一个“菜单”节点,其中包含所有按钮节点。请注意,这非常简单,因为更复杂的 UI 将需要更复杂的节点层次结构。但是,如果您的 UI 在游戏中“浮动”层,这将起作用。

    这样做的好处是您可以通过从树中删除父级来删除所有内容,或者只需将父级的 hidden 属性设置为 true

    【讨论】:

    • 是的。我知道有很多解决方案。 hidden = true 就是其中之一。另一个是删除节点(我真的不知道从内存管理的角度来看哪个是最佳的)。有时它仍然保留在 alpha 1 中,有时没有。正如我之前所说,这种行为是(或至少是接缝)随机的。真不知道这是谁的bug。我的或编译器的。无论如何,这很奇怪。我确实删除了精灵,但是......这种情况降低了我的信任。
    • 如果您的精灵是SKNode/SKSpriteNode 的子类,您始终可以创建设置器- (void)setHidden:(BOOL)hidden,然后查看谁调用它。或者,如果您还没有,您可以为出现问题的精灵创建一个子类。通常,这是用户错误。这当然并不意味着编译器没有问题(这可能不是问题)或 SDK(比编译器更可能,但比你更不可能)。
    猜你喜欢
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2018-12-23
    • 2020-06-27
    相关资源
    最近更新 更多