2016-07-31 59 views
1

我正在使用SKAction来缩放节点。游戏大约2分钟后,节点消失。基本的游戏玩法是你必须不断触摸节点缩小它,否则它会增长。所以你不能玩,如果它不在那里。我不知道为什么节点现在消失。节点在播放过程中消失显示错误...线程1:EXC_BAD_ACCESS(代码=,地址= 0x0)

代码创建节点:

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 )'

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

该错误消息用于这条线

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

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

始终突出了节点的physicsbody。有这些线 和节点代码

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

应用崩溃与错误的其余部分之间什么都没有。内存使用在游戏过程中并没有太多变化,但是它确实增加了。我已经评论了SKAction产品线,只要我喜欢,我就可以玩这款游戏。所以我明白,缩小节点并添加一个物理体使用了很多内存,但我不知道该怎么做。我试过在每次调用后删除节点并重新创建节点。试着用仪器进行调试,看看什么是dealloc,寻找参考周期,但我真的不知道我在找什么。

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

感谢所有帮助

+0

何时调用nodeAction和changeSizeToSmall? –

+0

nodeAction每次在您按下节点时都会被调用,它会检查您检查的前一个节点是否正确,如果它是正确的,则调用changeSizeTosmall()以便它创建一个增长和缩小的效果。如果它错了,它只会继续增长。 – sdIos

+0

因此,每次触摸节点时都会调用nodeAction?但它有8.5秒的持续时间。玩游戏时,你多频繁地触摸节点?每8.5秒更频繁一次? –

回答

1

我改变了节点的大小属性,因此,它将由SKAction而是这看似被改变。

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

相关问题