iOS 11中的SKReferenceNode问题

时间:2017-10-23 13:31:09

标签: ios iphone xcode sprite-kit

我发现一个奇怪的问题从iOS 11开始,我的应用程序不会更新我的SKReferenceNode上的精灵。基本上,我有一个“覆盖”节点(我用于多个场景的SKS文件),它有一个页眉和页脚。在标题中,有一个分数栏,当玩家得分时会扩展。我正在用SKAction为分数栏设置动画。从iOS 11开始,分数栏不会出现。它发生在模拟器和设备上。有趣的是,如果我通过调试器暂停/恢复应用程序,则会立即显示分数栏。我能够将问题删除到以下代码。

import SpriteKit

var overlayNode:SKNode?
var header = SKSpriteNode()
var scoreBar:SKSpriteNode?
var scaleX:CGFloat = 0.3

class GameScene: SKScene {

    override func didMove(to view: SKView) {

         let path = Bundle.main.path(forResource: "SceneOverlay", ofType: "sks")
         let overlay = SKReferenceNode(url: URL(fileURLWithPath: path!))

        self.addChild(overlay)

        overlayNode = overlay.children.first

        header = overlayNode!.childNode(withName: "header") as! SKSpriteNode

        scoreBar = SKSpriteNode(imageNamed: "redBar")
        scoreBar?.position = CGPoint(x: 0, y: 0)
        scoreBar?.zPosition = 10
        scoreBar?.anchorPoint = CGPoint(x: 0, y: 0.5)
        scoreBar?.xScale = 0
        header.addChild(scoreBar!)
    }


    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        scaleX += 0.1
        let scoreBarExpand = SKAction.scaleX(to: scaleX, duration: 0.8)

        scoreBar!.run(scoreBarExpand)
        print ("Expanding score bar to \(scaleX)")

    }

}

叠加SKS文件就是这样:

SKS Overlay Image

如果您在iOS 11模拟器或设备上运行此代码,并点击屏幕,则每次点击时都会显示分数栏并向上扩展10%。但是,你什么都看不到。然后,您可以在Xcode调试器中暂停和恢复应用程序,该栏将立即显示并展开。同样,此问题不会出现在iOS 10设备/模拟器上。

对这里发生了什么有任何想法?

提前致谢。

2 个答案:

答案 0 :(得分:6)

正如我在其他一些场景中指出的那样,但他们都指出了同样的问题。我发现iOS11和SpriteKit存在严重问题。过渡期间的游戏场景会自动暂停(但仅限iOS11)。

  

Knight0fDragon还指出,在转换过程中,对象在创建时暂停。但结果相同。

转换到场景运行后

myScene.isPaused = false 

并且它应该解决问题,并且在iOS10上运行游戏时应该没有不利影响

答案 1 :(得分:1)

我的ObjC项目遇到相同的问题。 Knight0fDragons的答案对我没有直接作用,但启发了我。

奇怪的是先暂停然后再暂停对我有用。

    myScene.paused = YES;
    myScene.paused = NO;

希望这对某人有帮助。