0
votes

I am making a game that requires you to dodge falling objects. I have tried to make it it so that when the falling object hits the player certain code runs. But it is not working please show me what is wrong with my code.

import SpriteKit

struct physicsCatagory {
    static let person : UInt32 = 0x1 << 1
    static let Ice : UInt32 = 0x1 << 2
}


class GameScene: SKScene, SKPhysicsContactDelegate {

   var person = SKSpriteNode(imageNamed: "Person")



    override func didMoveToView(view: SKView) {


        physicsWorld.contactDelegate = self


        person.position = CGPointMake(self.size.width/2, self.size.height/12)
        person.setScale(0.4)
        person.physicsBody = SKPhysicsBody(rectangleOfSize: person.size)
        person.physicsBody?.affectedByGravity = false
        person.physicsBody?.categoryBitMask = physicsCatagory.person
        person.physicsBody?.contactTestBitMask = physicsCatagory.Ice
        person.physicsBody?.dynamic = false



        var IceTimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("spawnFirstIce"), userInfo: nil, repeats: true)

        self.addChild(person)


        func didBeginContact(contact: SKPhysicsContact) {
            let firstBody = contact.bodyA
            let secondBody = contact.bodyB

            if firstBody.categoryBitMask == physicsCatagory.person && secondBody.categoryBitMask == physicsCatagory.Ice || firstBody.categoryBitMask == physicsCatagory.Ice && secondBody.categoryBitMask == physicsCatagory.person{
       NSLog ("Test Test")           }


        }


    }




    func spawnFirstIce(){

        let Ice = SKSpriteNode(imageNamed: "FirstIce")
        Ice.setScale(0.5)
        Ice.physicsBody = SKPhysicsBody(rectangleOfSize: Ice.size)
        Ice.physicsBody?.categoryBitMask = physicsCatagory.Ice
        Ice.physicsBody?.contactTestBitMask = physicsCatagory.person
        Ice.physicsBody?.affectedByGravity = false
        Ice.physicsBody?.dynamic = true



        let MinValue = self.size.width / 8
        let MaxValue = self.size.width - 20
        let SpawnPoint =  UInt32(MaxValue - MinValue)
        Ice.position = CGPoint(x: CGFloat(arc4random_uniform(SpawnPoint)), y: self.size.height)
        self.addChild(Ice)



        let action = SKAction.moveToY(-85, duration: 3.0)
        let actionDone = SKAction.removeFromParent()
        Ice.runAction(SKAction.sequence([action,actionDone]))


    }
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {


        for touch in touches {
            let location = touch.locationInNode(self)

         person.position.x = location.x



                   }
    }
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {

        for touch in touches {
            let location = touch.locationInNode(self)

            person.position.x = location.x



        }
    }




    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
    }
}
1

1 Answers

1
votes

You have defined didBeginContact inside of didMoveToView method :)

Place didBeginContact outside of that method and make it a member of GameScene class.