2016-07-18 18 views
1

Ich erstelle ein Spiel und ich versuche, einen Charakter zu erstellen, der zwei verschiedene Knoten hat, die Beine und der Torso. Ich habe versucht, sie mit einem festen Gelenk zu verbinden, aber wenn ich das tue, rutscht der Rumpf manchmal von den Beinen, während er sich bewegt. Jetzt versuche ich, den Charakter mit einem Distanzlimit zwischen den 2 Knoten zu erstellen, in der Hoffnung, dass sie jetzt nicht voneinander wegrutschen werden, aber es stürzt beim Start jeder Idee ab? hier ist mein CodeAbsturz beim Start, Fehler mit SKsphysics Joint

func CreateHero(){ 

    soldierLegs.position = CGPoint(x: 405 , y: 139) 
    soldierLegs.zPosition = 1 
    soldierLegs.anchorPoint.x = 0.6 
    soldierLegs.anchorPoint.y = 0.7 

    let soldierLegsBody:SKPhysicsBody = SKPhysicsBody(rectangleOfSize: 
    soldierLegs.size) 
    soldierLegsBody.dynamic = true 
    soldierLegsBody.affectedByGravity = true 
    soldierLegsBody.allowsRotation = false 
    //body.restitution = 0.4 
    soldierLegsBody.categoryBitMask = BodyType.soldierL.rawValue 
    soldierLegsBody.contactTestBitMask = BodyType.enemy1.rawValue | 
    BodyType.enemy2.rawValue | BodyType.enemy3.rawValue | 
    BodyType.desertForegroundCase.rawValue 
    soldierLegs.physicsBody = soldierLegsBody 

    soldierTorso.position = soldierLegs.position 
    soldierTorso.zPosition = 2 
    soldierTorso.anchorPoint.x = 0.25 
    soldierTorso.anchorPoint.y = 0.1 

    let soldierTorsoBody:SKPhysicsBody = SKPhysicsBody(rectangleOfSize: 
    soldierTorso.size) 
    soldierTorsoBody.dynamic = true 
    soldierTorsoBody.affectedByGravity = true 
    soldierTorsoBody.allowsRotation = false 
    soldierTorsoBody.categoryBitMask = BodyType.soldierT.rawValue 
    soldierTorsoBody.contactTestBitMask = BodyType.enemy1.rawValue | 
    BodyType.enemy2.rawValue | BodyType.enemy3.rawValue | 
    BodyType.desertForegroundCase.rawValue 
    soldierTorso.physicsBody = soldierTorsoBody 

    let Joint = 
    SKPhysicsJointLimit.jointWithBodyA(soldierLegs.physicsBody!, bodyB: 
    soldierTorso.physicsBody!, anchorA: soldierLegs.position, anchorB: 
    soldierTorso.position) 

    Joint.maxLength = 0.01 

    self.addChild(soldierTorso) 
    self.addChild(soldierLegs) 
    self.physicsWorld.addJoint(Joint) 

} 

enter image description here

What i am talking about

Antwort

0

Nach dem Apple official document:

eine Grenze Joint Erstellen

class func joint(withBodyA: SKPhysicsBody, bodyB: SKPhysicsBody, anchorA: CGPoint, anchorB: CGPoint) 

Erstellt ein neues li mit Gelenk.

anchorA Ein Verbindungspunkt auf dem ersten Körper im Koordinatensystem der Szene.

anchorB Ein Verbindungspunkt auf dem zweiten Körper im Koordinatensystem der Szene.

In Ihrem Fall ist anchorA gleich anchorB (der gleiche Punkt), es gibt keine Begrenzung, diese verursacht den Absturz.

+0

Wie erstelle ich eine gemeinsame Grenze? Ich dachte, dass die Festlegung des joint.maxLength-Wertes ein Entfernungslimit festlegte. Wie schlägst du vor, dass ich das Limit erstelle? @alessandro – gkolman

+0

Geben Sie nicht die gleichen Punkte, geben Sie eine andere Punkte und geben Sie einen angemessenen Abstand zwischen A und B, so dass sie einander nicht überlappen. Sie können skView.showsPhysics einschalten, um die benötigte Entfernung zu sehen. –