swift - 无法从函数内访问 SKSpriteNode

标签 swift sprite-kit

在访问我在碰撞检测中添加到场景中的对象时,我遇到了一个问题: 在顶部的 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/

相关文章:

ios - 按下导航后退按钮时返回根目录

ios - UILabel IOS Swift 中的动画值

ios - 在 Xcode 8 中隐式展开可选分配

ios - 使用 Swift 在 SpriteKit 中复制()节点

swift - 如何对字符串日期数组进行排序

swift - 测试 UIAlertController 是否已经出现

Swift SpriteKit 创建可变路径 (CGMutablePathRef)

ios - Spritekit游戏设计

ios - 以不同的持续时间永远重复 Action

ios - 使用 SpriteKit 缩放 SkSpriteNodes