【问题标题】:Weird behavior of SKAction on childrenSKAction 对儿童的奇怪行为
【发布时间】:2020-07-03 06:55:41
【问题描述】:

好吧,我的目标是提取SKScene 的内容,然后对其节点运行一些操作:

func loadSceneNodes() {
    let loadedScene = SKScene(fileNamed: "newScene.sks")

    // Reads the content of the "Content" node in the newScene.sks
    let content = loadedScene!.childNode(withName: "Content") as! SKSpritenode

    // I move the content to self
    // (THANKS Knight0fDragon for suggestion)
    content.move(toParent: self)

    // Forces the unpause
    self.isPause = false

    // Try to run a test action on the node
    content.run(.rotate(byAngle: 90, duration: 2.0)) {
        print("DONE")
    }

    print(content.hasActions()) // DEBUG -> it prints TRUE
}

发生的情况是我成功阅读了内容并显示在场景中,但即使hasActions() 结果true 也没有显示动作。

通过玩断点和调试控制台,我发现了一些非常有趣的东西。 content.hasActions() 返回 true 因为所有的 SKActions 都进入了堆栈:

它们看起来像冻结了,因为如果我分配更多动作,它们将一个接一个地堆叠而不会运行。 只有一旦我退出断点(或者我是否暂停然后通过 xCode 播放应用程序)才会执行所有操作。就像应用“需要”刷新一样。

【问题讨论】:

    标签: swift xcode sprite-kit game-development skaction


    【解决方案1】:

    在您的 sknode 上使用 moveToParent 而不是在您的父节点上使用 addChild 以避免创建副本的需要。

    确保isPaused 状态设置为 false,您可能在它为 true 的时候复制

    【讨论】:

    • 感谢您的回复。我采用了move(toParent:) func 而不是copy(),它工作正常。问题是SKActions 仍然不起作用。 :(
    • 你检查过isPaused吗?此外,在执行此操作之前,需要将场景附加到视图。
    • isPaused 默认设置为 false。 “需要附加”是什么意思?
    • 仅仅因为它被设置为默认值并不意味着它不会被改变。 Sprite kit 在场景加载过程中来回改变它。所有 SKScene 都需要附加到 SKView。您需要在将操作分配给视图后添加操作,以便正确同步时间。
    • 已解决!你是对的,@Knight0fDragon,我应该“取消暂停”content。我误解了你,我曾经取消暂停场景本身,我的错。谢谢你帮助我
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多