【问题标题】:SKAction.run not working until program execution paused/resumedSKAction.run 在程序执行暂停/恢复之前不起作用
【发布时间】:2018-12-29 21:33:10
【问题描述】:

第一次使用 SpriteKit - 点击开始按钮会调用 GameScene 中的 startLevel 方法,让玩家精灵在 SKAction.sequence 中触发两个 SKAction.run 语句。 startLevel 方法有一个完成块,它会触发向控制台发送消息并更新游戏状态。

点击开始会显示消息,但 SKAction.run 语句不起作用,除非我先暂停程序执行,然后在点击开始按钮之前单击恢复。如果我停止关卡并点击重试按钮,则会调用相同的 startLevel 方法,并且它可以正常工作而不会暂停执行。

方法如下(player、marker、door,都是可选的对象,存储自己的sprite;点击start的时候,我验证了没有一个sprite是nil,没有一个暂停,GameScene和SKView也没有暂停):

func startLevel(finished: () -> ()) {
    guard let player = player,
        let marker = marker,
        let door = door else {
        fatalError()
    }
    player.sprite.run(SKAction.sequence([
        SKAction.run({ marker.pop(appear: true) }),
        SKAction.run({ door.slide(open: true) }),
    ]))
    finished()
}

这是调用 startLevel 的 GameScene 代码:

startLevel(finished: { () -> () in
    print("ALERT: startLevel finished")
    levelStarted = true
})

我尝试添加带有控制台消息的运行方法完成块,但该消息永远不会打印。似乎 player.sprite.run 方法被简单地忽略了(除非我先暂停执行),我不明白为什么。感谢您的帮助。

顺便说一句,上面的所有代码都在 GameScene 的更新方法之外,上面的标记和门方法都在 didBegin() 和 didEnd() 中使用,它们在那里工作正常。

【问题讨论】:

    标签: ios sprite-kit skaction completionhandler


    【解决方案1】:

    在 iOS 11 中,Apple 使 Spritekit 场景和对象默认暂停。

    我要做的就是解决这个问题......

    在我的 SKScene 中

    override func didMove(to view: SKView) {
    
        //this ensures that the scene is not paused
        self.isPaused = false
    }
    

    在我的每个自定义对象设置或初始化中

    self.isPaused = false
    

    【讨论】:

    • 我也是这样做的——注意上面我写的所有对象都没有暂停;可以肯定的是,我在 SKAction 之前打印了每个对象的 isPaused;他们都是假的。
    • BTW - 为了完全清楚,除了打印 isPaused 之外,我还尝试在 SKAction 调用之前将 GameScene、SKView 和每个对象的 isPaused 明确设置为 false,但它们仍然没有在我第一次暂停执行之前无法工作。
    • 我知道你会不同意我的观点,但我敢打赌,有些事情被暂停了,你没有考虑到。我曾经遇到过同样的问题,我和一位同事花了 3 天时间才弄清楚。如果我在代码中设置断点并暂停游戏并重新开始,我的所有操作都可以正常工作。
    • startlevel在哪里调用
    • 另外,在更新函数中打印 scene.isPaused
    猜你喜欢
    • 2011-11-10
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多