2015-07-09 15 views
6

Desidero essere in grado di modificare la fisica di un nodoAltezza del corpo quando l'utente scorre verso il basso, ma non è stato in grado di scoprire come farlo, oltre a resettare l'intero corpo fisico.Modifica SpriteNode PhysicsBody Size in fase di esecuzione

Quando ho inizialmente carico del nodo, io uso il codice qui sotto:

nodeHero.color = UIColor .grayColor() 
    nodeHero.size.width = 20 
    nodeHero.size.height = 45 
    nodeHero.position.x = -frame.size.width/2 + 45 
    nodeHero.position.y = pointMainY + 30 + nodeHero.size.height/2 
    nodeHero.zPosition = 110 

    nodeHero.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(nodeHero.size.width, nodeHero.size.height)) 
    nodeHero.physicsBody?.mass = 1 
    nodeHero.physicsBody?.angularVelocity = 0 
    nodeHero.physicsBody?.allowsRotation = false 
    nodeHero.physicsBody?.restitution = 0 
    nodeHero.physicsBody?.categoryBitMask = bitHero 

    addChild(nodeHero) 

E quando ho scorrere verso il basso, voglio essere in grado di fare qualcosa di simile (questo non funziona):

nodeHero.size.height = 28 
    nodeHero.physicsBody?.size.height = 28 

invece devo usare il nodeHero.physicsBody = SKPhysicsBody nuovamente(), che resetta tutte le altre proprietà physicsBody, quindi devo fare questo:

nodeHero.size.height = 28 

    nodeHero.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(nodeHero.size.width, nodeHero.size.height)) 
    nodeHero.physicsBody?.mass = 1 
    nodeHero.physicsBody?.angularVelocity = 0 
    nodeHero.physicsBody?.allowsRotation = false 
    nodeHero.physicsBody?.restitution = 0 
    nodeHero.physicsBody?.categoryBitMask = bitHero 
+0

Se si esegue un'azione di scala su un nodo, sembra che anche il suo corpo fisico cambierà: https://stackoverflow.com/questions/24638086/scaling-physics-bodies-in-xcode-spritekit/33572073#33572073 – peacetype

risposta

3

According to SpriteKit documentation L'area di un SKPhysicsBody non può essere modificata, quindi è necessario creare un'altra istanza di SKPhysicsBody e copiare i valori che si desidera conservare dall'istanza precedente.

+0

Ricardo Amores ha ragione non puoi ridimensionare la fisica. In tempo di esecuzione, devi ricrearla e assegnarla alla tua texture – dragoneye

Problemi correlati