2016-05-06 10 views
0

überqueren kann ich die SKContactDelegate SetupKollisionserkennung in Xcode (swift) wird nicht funktionieren, ich versuche, Grenzen zu setzen, in dem der Spieler nicht

class GameScene: SKScene, SKPhysicsContactDelegate 
{ 
    override func didMoveToView(view: SKView) 
{ 
    self.physicsWorld.contactDelegate = self 

Hier habe ich Setup die Enum

enum ColliderType:UInt32 
{ 
    case Player = 1 
    case Boundary = 2 
} 

Hier mache ich den Player-Knoten.

let playerTexture = SKTexture(imageNamed: "testCircle1.png") 
    thePlayer = SKSpriteNode(texture: playerTexture) 
    thePlayer.position = CGPointMake(frame.size.width - 350, frame.size.height/2) 
    thePlayer.zPosition = 5 
    thePlayer.size = CGSize(width: 100, height: 100) 
    thePlayer.name = "playerNode" 
    thePlayer.physicsBody = SKPhysicsBody(circleOfRadius: playerTexture.size().height/2) 
    thePlayer.physicsBody!.dynamic = false 
    thePlayer.physicsBody!.allowsRotation = false 

    thePlayer.physicsBody!.categoryBitMask = ColliderType.Player.rawValue 
    thePlayer.physicsBody!.contactTestBitMask = ColliderType.Boundary.rawValue 
    thePlayer.physicsBody!.collisionBitMask = ColliderType.Boundary.rawValue 
    addChild(thePlayer) 

Dann Setup ich die Grenzen

ground = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(frame.size.width - 150, 10)) 
    ground.position = CGPointMake(frame.size.width/2 - 75, 96) 
    ground.zPosition = 5 
    ground.physicsBody = SKPhysicsBody(rectangleOfSize:  CGSizeMake(ground.size.width, ground.size.height)) 
    ground.physicsBody!.dynamic = false 
    ground.physicsBody!.allowsRotation = false 

    ground.physicsBody!.categoryBitMask = ColliderType.Boundary.rawValue 
    ground.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue 
    ground.physicsBody!.collisionBitMask = ColliderType.Player.rawValue 
    addChild(ground) 

    sky = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(frame.size.width - 150, 10)) 
    sky.position = CGPointMake(frame.size.width/2 - 75, frame.size.height - 96) 
    sky.zPosition = 5 
    sky.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(frame.size.width - 150, 10)) 
    sky.physicsBody!.dynamic = false 
    sky.physicsBody!.allowsRotation = false 

    sky.physicsBody!.categoryBitMask = ColliderType.Boundary.rawValue 
    sky.physicsBody!.contactTestBitMask = ColliderType.Player.rawValue 
    sky.physicsBody!.collisionBitMask = ColliderType.Player.rawValue 
    addChild(sky) 

Dann wird die Kollisionserkennung

func didBeginContact(contact: SKPhysicsContact) 
{ 
    print("Contact") 
    if contact.bodyA.categoryBitMask == ColliderType.Boundary.rawValue || contact.bodyB.categoryBitMask == ColliderType.Boundary.rawValue 
    { 
     print("Contact") 
     thePlayer.removeAllActions() 
    } 
} 

ich außerhalb der if-Anweisung des Druck versucht setzen, um zu sehen, ob es sogar Kollisionserfassungs wurde überhaupt aber das war es nicht.

Ich habe schon in vielen Tutorials geschaut und folgten dem, was sie taten, aber es wird einfach nicht funktionieren und ich habe nur noch ein paar Wochen, dies zu drehen in

+0

Warum ist die Physik Körper dynamisch = false gesetzt des Spielers? Das würde bedeuten, dass es eine Grenze ist und nicht von der Physik beeinflusst wird. –

+0

Omg Alter danke, ich fühle mich jetzt wirklich dumm, wenn man bedenkt, wie einfach eine Lösung war. Der Grund, warum ich dynamic auf false gesetzt habe, war, dass es nicht von der Schwerkraft beeinflusst wird, aber ich habe die betroffeneByGravity-Funktion völlig vergessen. Danke, Mann! –

+0

Ich habe den Kommentar auf eine Antwort übertragen, damit Sie ihn als beantwortet markieren können ... –

Antwort

0

In den Spieler Knoten

entfernen diese.:

thePlayer.physicsBody!.dynamic = false 

der physikalischen Körper setzt eine Grenze zu sein und kein Körper ...