在访问我在碰撞检测中添加到场景中的对象时,我遇到了一个问题:
在顶部的 GamScene.swift 中,我声明
var passenger: PassengerNode!
然后我触发了一个 spawnPassenger 方法,它看起来像这样
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)
}
App 构建良好,但是一旦触发碰撞并触发此 Action:
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")
}
被触发我得到一个崩溃和一个 fatal error 打印出 fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb)
谁能指出我的错误?我就是想不通
最佳答案
您的错误是您的 spawnPassenger
函数的第一行。您正在使用 let
创建一个具有该函数作用域的新常量。我认为您没有重新声明 passenger 变量,而是打算将其设置为您之前创建的类变量。删除 let
并说:
passenger = SKSpriteNode(imageNamed: "passenger")
这样一来,您只引用了一个 passenger 变量,而不是在本地范围内创建一个新变量。
关于swift - 无法从函数内访问 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35255390/