设置SKSpriteNode

时间:2017-10-12 14:38:15

标签: ios swift xcode9

在模拟器中,我在设置SKSpriteNode时在我的iOS应用程序中获得了EXC_BAD_ACCESS。它发生在我使用新值将循环中的SKSpriteNode设置为10次后,并使用addChild()将节点添加到视图中。当我清除所有孩子的视图(self.removeAllChildren)并想再次设置SKSpriteNode时,应用程序崩溃(仅在模拟器中)。

以下是代码:

func drawCards(hand:[String], trick:[String]) {
    self.removeAllChildren()
    if (hand.count > 0) {
        for index in 0...(hand.count-1) {
            var xPosition = size.width
            let relativePosition = CGFloat(CGFloat(-hand.count) / 2.0 + CGFloat(index)) * 0.05
            xPosition *= ( 0.525 + relativePosition)
            var yPosition = size.height
            yPosition *= 3 * (cos(relativePosition * 0.5) - 1) + 0.05
            let card = SKSpriteNode(imageNamed: hand[index]) // This is where the app crashes after the loop is called the second time
            card.position = CGPoint(x: xPosition, y: yPosition)
            card.zRotation = -20 * CGFloat.pi / 180 * relativePosition
            card.scale(to: CGSize(width: 125, height: 182))
            card.zPosition = CGFloat(index)
            card.name = hand[index]
            addChild(card)
        }
    }
}

我拥有所有尺寸(1x,2x,3x)的资产目录中的所有图像。这是我在进入指定的代码行时得到的结果:

@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { Thread 1: EXC_BAD_ACCESS (code=2, address=0x10f3a9368)

问题只出现在模拟器中,并且只是因为我切换到了xCode9 / swift 4.0。

当我单步执行代码时,看起来removeAllChildren不会清除屏幕。这是一种异步方法吗?我可以等待它完成吗?

0 个答案:

没有答案