2016-07-31 13 views
1

Ich benutze SKAction, um einen Knoten zu skalieren. Nach etwa 2 Minuten Spielzeit verschwindet der Knoten. Grundlegendes Gameplay ist, dass Sie den Knoten berühren müssen, um ihn zu verkleinern, sonst wächst er. Du kannst also nicht spielen, wenn es nicht da ist. Ich bin mir nicht sicher, warum der Knoten jetzt verschwindet.Knoten verschwindet während der Wiedergabe zeigt Fehler ... Thread1: EXC_BAD_ACCESS (code =, Adresse = 0x0)

Code, der Knoten erzeugt: 60, Höhe::

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

Funktion, um eine korrekte Antwort

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 = (Breite 60 zu vergleichen,) '

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

Die Fehlermeldung für diese Linie

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

Thread1: EXC_BAD_ACCESS (Code =, Adresse = 0x0)

und immer unterstreicht die physicsbody des Knotens. Es gibt nichts zwischen diesen Linien und dem Rest des Knotens Code

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

Die App stürzt mit diesem Fehler. Die Speicherbelegung ändert sich während des Spiels nicht zu sehr, aber sie nimmt zu. Ich habe die SKAction-Linie auskommentiert und kann das Spiel so lange spielen, wie ich möchte. So verstehe ich, dass das Schrumpfen des Knotens und das Hinzufügen eines Physikkörpers viel Speicher benötigt, aber ich weiß nicht, was ich stattdessen tun soll. Ich habe versucht, den Knoten nach jedem Aufruf zu entfernen und neu zu erstellen. Ich habe versucht, mit den Instrumenten zu debuggen, um zu sehen, was dealloc ist, suche nach Referenzzyklen, aber ich bin mir wirklich nicht sicher, wonach ich suche.

Was kann ich tun, um dies zu verhindern?

Vielen Dank für jede Hilfe geändert

+0

Wann nodeAction und changeSizeToSmall genannt? –

+0

Die nodeAction wird jedes Mal aufgerufen, nachdem Sie den Knoten gedrückt haben, der überprüft, ob der vorherige Knoten, den Sie berührt haben, korrekt war. Er ruft changeSizeTosmall() auf, um einen wachsenden und schrumpfenden Effekt zu erzeugen. Wenn es falsch ist, wächst es einfach weiter. – sdIos

+0

So wird NodeAction jedes Mal aufgerufen, wenn Sie einen Knoten berühren? Aber es hat eine Dauer von 8,5 Sekunden. Wie oft berühren Sie den Knoten, wenn das Spiel abgespielt wird? Mehr als einmal pro 8,5 Sekunden? –

Antwort

1

ich die Eigenschaft Größe des Knotens, so dass sie von einem SKAction stattdessen scheint dies zu funktionieren geändert werden würde.

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