2015-07-09 13 views
6

Ich möchte in der Lage sein, die physicBody Höhe eines Knotens zu ändern, wenn der Benutzer nach unten wischt, aber nicht in der Lage gewesen, herauszufinden, wie dies zu tun, neben dem Zurücksetzen der gesamten Physik.Ändern SpriteNode PhysicsBody Größe zur Laufzeit

Wenn ich ursprünglich die Knoten laden, benutze ich den folgenden Code:

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) 

Und wenn ich nach unten wischen, ich möchte in der Lage sein, so etwas zu tun (das funktioniert nicht):

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

Aber stattdessen muss ich wieder die nodeHero.physicsBody = SKPhysicsBody() verwenden, die alle anderen physicsBody Eigenschaften zurücksetzt, so habe ich dies tun:

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

Wenn Sie eine Skalierungsaktion auf einem Knoten ausführen, scheint sich auch dessen physischer Körper zu ändern: https://stackoverflow.com/questions/24638086/scaling-physics-bodies-in-xcode-spritekit/33572073#33572073 – peacetype

Antwort

3

According to SpriteKit documentation Der Bereich eines SKPhysicsBody kann nicht geändert werden, daher müssen Sie eine andere SKPhysicsBody-Instanz erstellen und die Werte kopieren, die Sie von der vorherigen Instanz beibehalten möchten.

+0

Ricardo Amores hat Recht, du kannst die Größe von physicsBody nicht ändern. Zur Laufzeit musst du sie neu erstellen und deiner Textur zuweisen – dragoneye