2016-10-03 3 views
1

Also habe ich einen Spieler erstellt, der kachelbasiert bewegt und eine Mauer um die Map legt, um den Spieler auf dem Spielplatz zu halten. Beide haben einen Physikkörper in ihnen. Meine Vermutung ist, dass meine Bewegung des Spielers nicht richtig ist und so der Spieler in die Wände stößt. Lassen Sie mich Ihnen nur zeigen, meinen Code:SpriteKit: Sprites bewegen sich durcheinander mit einem physicsBody bereits gesetzt

Das ist also die physicsBody des Spielers:

self.physicsBody!.usesPreciseCollisionDetection = true 
self.physicsBody!.categoryBitMask = PhysicsCategory.Player 
self.physicsBody!.contactTestBitMask = PhysicsCategory.House 
self.physicsBody!.collisionBitMask = PhysicsCategory.Wall 

Und das ist die physicsBody der Mauer:

self.physicsBody!.usesPreciseCollisionDetection = true 
self.physicsBody!.categoryBitMask = PhysicsCategory.Wall 
self.physicsBody!.contactTestBitMask = 0 
self.physicsBody!.collisionBitMask = PhysicsCategory.Player 
self.physicsBody!.isDynamic = false 

Sie sowohl von der Klasse erben Objekte:

self.physicsBody = SKPhysicsBody(rectangleOf: size) 
self.physicsBody!.affectedByGravity = false 
self.name = name 

So und lassen Sie mich nur geben Sie meinen Code für die Bewegung des Spielers, wenn das ist die Ursache:

func move(direction: String, width: CGFloat){ 
    //Choosing the direction based of the users touch 
    switch direction{ 
     case "South": 
     //Decreasing the position of the player by 1 Tile 
     pos.y -= width 

     //Flipping the picture the right way to make the player look in the right direction 
     yScale = 1.0 

     //Rotates the picture 
     let rotateAction = SKAction.rotate(toAngle: -1.57, duration: 0.0) 
     run(rotateAction) 

     //All the other directions just change the x and y value of pos corresponding to the direction 
    } 

    //Moves the player to the calculated position 
    let moveAction = SKAction.move(to: pos, duration: 0.0) 
    run(moveAction){ 
     //Sound 
    } 

Edit:

Die Werte der PhysicsCategory.Player und PhysicsCategory.Wall

struct PhysicsCategory{ 
    static let Wall:UInt32 = 0x1 << 0 
    static let Player:UInt32 = 0x1 << 1 
    static let House:UInt32 = 0x1 << 2 
} 

Edit 2:

Das Hauptproblem Kollision mit SKAction zu bekommen, ist richtig funktioniert

+0

geändert hätte Was sind die Werte von: PhysicsCategory.Player, PhysicsCategory.House und PhysikKategorie.Wall? – Confused

+0

Bearbeitet. Das Haus ist das Ziel, zu dem der Spieler gehen muss. Die gleichen Fehler passieren auch dort. –

+0

Wir brauchen einen viel größeren Verstand als meinen. Meine ist verwirrt. – Confused

Antwort

3

Sie haben Ihr p nicht wirklich beschrieben Problem anders als "Sprites bewegen sich durch ..." und "so der Spieler Bugs in die Wände"

Um alle Ihre Kontakte und Collisions zu validieren, werfen Sie einen Blick auf meine Antwort hier: iOS SpriteKit - collisions and contacts not working as expected und versuchen Sie die Umsetzung der checkPhysics() -Funktion und rufen Sie es auf, sobald Sie denken, dass Sie alle Ihre Physikkörper und ihre Interaktionen eingerichtet haben.

Sind Sie sicher, dass:

  • Spieler und Wand tatsächlich Körper Physik haben?
  • die Szene ist ein SKPhysicsContactDelegate
  • Sie eingestellt haben physicsWorld.contactDelegate = self
  • Sie haben eine der optionalen Methoden der SKPhysicsContactDelegate implementiert:
    • didBeginContact
    • didEndcontact

Ist diese corr ect:

  • Sie möchten, dass der Player mit der Wand kollidiert?
  • Sie möchten, dass die Wand mit dem Player kollidiert?
  • Sie möchten benachrichtigt werden (didBegincontact genannt) wenn der Spieler und das Haus berühren?
  • Sie möchten nicht benachrichtigt werden, wenn die Wand irgendetwas berührt?
+0

Ja, tat ich. Oben habe ich einen Chat verlinkt, bei dem ich ein Video mit dem Problem hochgeladen habe. Ich werde auf Ihre checkPhysics Funktion schauen –

+0

Ah OK - machen Sie den Chatlink ein wenig offensichtlicher. –

+0

Entschuldigung. Das ist richtig. –

3

Es wird hier in der Frage nicht aufgeführt, aber der Grund, warum Kollision Kontakt ist nicht passiert, weil die Methode didBeginContact-didBegin

+0

Was ist mit den Collisons? War das ok oder war da noch etwas anderes? –

Verwandte Themen