【问题标题】:Node disappears during play shows error ...Thread1: EXC_BAD_ACCESS (code=, address= 0x0)播放期间节点消失显示错误...Thread1: EXC_BAD_ACCESS (code=, address= 0x0)
【发布时间】:2016-07-31 13:19:51
【问题描述】:

我正在使用 SKAction 来扩展节点。玩了大约 2 分钟后,节点消失了。基本游戏玩法是您必须不断触摸节点以缩小它,否则它会增长。因此,如果它不存在,您将无法播放。我不确定为什么节点现在消失了。

创建节点的代码:

node.create(mainScreenview, position: CGPoint(x: frame.size.width / 2, y: frame.size.height / 2), size: CGSize(width: 150, height: 150), color: greyColour, name: "Test")


func nodeAction() {
    node.runAction(SKAction.scaleBy(10.0, duration: 8.5))
}

比较正确答案的功能

 func compareNodes() {

if !nodesToCheck.isEmpty {
  let checkThisNode = nodesToCheck[0] as! SKSpriteNode
  if checkThisNode.name == node.name {
    node.physicsBody = nil
    node.removeAllActions()

    score += 1
    nodesToCheck.removeAll()
    changeSizeToSmall()


  } else {
    gameOver()
  }
}

}

func changeSizeToSmall() {

'node.size = CGSize(宽:60,高:60)'

现在SKAction.resizeToWidth(60, height: 60, duration: 1.0))

这一行的错误信息

node.physicsBody = SKPhysicsBody(circleOfRadius: node.size.width / 2)

线程1:EXC_BAD_ACCESS(代码=,地址= 0x0)

并且总是突出显示节点的物理体。这些线之间没有任何东西 以及其余的节点代码

    node.physicsBody?.affectedByGravity = false
    node.physicsBody?.categoryBitMask = PhysicsCategory.node.rawValue
    node.physicsBody?.contactTestBitMask = PhysicsCategory.bird.rawValue
    node.physicsBody?.collisionBitMask = 0
}

应用程序因该错误而崩溃。游戏过程中内存使用量变化不大,但确实增加了。我已经注释掉了 SKAction 行,我想玩多久就玩多久。所以我知道缩小节点并添加物理体会占用大量内存,但我不知道该怎么做。每次调用它并重新创建它后,我都尝试删除该节点。尝试使用仪器进行调试以查看正在释放的内容,寻找参考周期,但我真的不确定我在寻找什么。

我能做些什么来阻止这种情况发生?

感谢您的帮助

【问题讨论】:

  • nodeAction 和 changeSizeToSmall 什么时候调用?
  • 每次按下节点后都会调用nodeAction,它会检查您触摸的上一个节点是否正确,如果正确,它会调用changeSizeTosmall(),从而产生增长和收缩的效果.如果错了,它只会继续增长。
  • 所以每次触摸节点时都会调用nodeAction?但它的持续时间为 8.5 秒。玩游戏时,您触摸节点的频率如何?每 8.5 秒不止一次?
  • 是的,如果它是正确的,我会从节点中删除动作并将大小更改为小,重新添加物理体并再次在节点上运行动作。因此,如果答案正确,它会每隔几秒/很多次调用一次。只有 1 个节点在增长和缩小,但场景中还有其他 spritenodes 被触及。
  • 我明白了。仅凭这些少量代码很难看出发生了什么。你能提供更多的代码吗?特别是在 changeSizeToSmall 中崩溃的那条线,在它之前还有其他东西吗?您还说节点消失并且应用程序崩溃 - 这些是否同时发生?如果不是节点在崩溃前消失多长时间?它总是在 2 分钟后崩溃还是偶尔崩溃?

标签: ios swift sprite-kit skaction


【解决方案1】:

我更改了节点的大小属性,以便通过 SKAction 更改它,而这似乎可行。

SKAction.resizeToWidth(60, height: 60, duration: 1.0))

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多