boehmatron
boehmatron

Reputation: 713

Can not access an SKSpriteNode from within a function

I faced a problem, when accessing an object I added to my scene within my collision detection: Within my GamScene.swift on the top I declared var passenger: PassengerNode!

And I trigger a spawnPassenger method, which is looking like this

func spawnPassenger(x: CGFloat, y: CGFloat){
    let passenger = SKSpriteNode(imageNamed: "passenger")
    passenger.position = CGPoint(x: platformArray[2].position.x, y: platformArray[2].position.y)
    passenger.position.x = x
    passenger.position.y = y
    //passenger.physicsBody!.categoryBitMask = PhysicsCategory.Passenger
    passenger.zPosition = 5
    passenger.anchorPoint = CGPointZero
    //print("passenger spawned")
    self.addChild(passenger)

}

The App builds fine, but as soon as the collision is fired and this Action is triggered:

func actionPassengerOnboarding(){
        let moveToTaxi = SKAction.moveTo(CGPoint(x: taxiNode.position.x, y: platformNode3.position.y), duration: 2);
        let removePassenger = SKAction.removeFromParent()
        let setPassengerToOnBoard = SKAction.runBlock({ () -> Void in
    self.passengerOnBoard = true
    })
        let onBoardActionSequence = SKAction.sequence([moveToTaxi, removePassenger, setPassengerToOnBoard])
        self.passenger.runAction(onBoardActionSequence, withKey: "isOnboarding")
}

is triggered I get a crash and a fatal error printed out fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

Can anyone point me to my error? I just cant figure it out

Upvotes: 0

Views: 38

Answers (1)

Chris Slowik
Chris Slowik

Reputation: 2879

Your error is the first line of your spawnPassenger function. You're making a new constant with let that has scope to that function. Instead of re-declaring a passenger variable, I think you're intending to set it to the class variable you made before. Remove the let and just say:

passenger = SKSpriteNode(imageNamed: "passenger")

This way, you're only referencing that one passenger variable and not making a new one with local scope.

Upvotes: 2

Related Questions