加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sprite-kit – SpriteKit.从可选到强制解包的更改会导致应用程序

发布时间:2020-12-14 04:48:29 所属栏目:百科 来源:网络整理
导读:我正在关注SpriteKit的教程,它有一个IF语句的问题.该线的逻辑如下:如果子弹和小行星发生碰撞,则将其移除. if body1.categoryBitMask == PhysicsCategories.bullet body2.categoryBitMask == PhysicsCategories.asteroid { // remove bullet and asteroid}
我正在关注SpriteKit的教程,它有一个IF语句的问题.该线的逻辑如下:如果子弹和小行星发生碰撞,则将其移除.

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid {
   // remove bullet and asteroid
}

当试图确保小行星(body2.node)在可关闭区域之前可以关闭之前,会出现问题.为此,作者添加了以下内容:

body2.node?.position.y < self.size.height

制作完整的IF声明如下:

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid && body2.node?.position.y < self.size.height {
   // remove bullet and asteroid
}

显然这条线与Swift 2配合使用,但是Swift 3进行了一次校正,从一个可选的位置改变了位置,并且力量展开了位置.

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid && body2.node!.position.y < self.size.height {
        // remove bullet and asteroid        
    }

通过强行展开位置,当三个物体碰撞时,应用程序崩溃了“我认为”.在看屏幕时真的很难分辨.

我正在测试下面的代码,我还没有遇到任何问题.你们认为下面的修复工作会起作用吗?我在想的是,如果我确定body2.node不是nil,那么没有理由为什么应用程序应该崩溃,因为在尝试强行打开它时不会遇到nil.

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid {
    // If the bullet has hit the asteroid
  if body2.node != nil {
    if ( body2.node!.position.y < self.size.height ) {
       // remove bullet and asteroid
    }           
  }           
}

或者,如果有其他方式,你们可以建议一种不同的方式来编写原始的IF声明?

谢谢

解决方法

是的,if!= nil语句(因为它当前已写入)将防止强制解包引起的崩溃.

另一种方法是在Swift中使用if let语法:

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid {
    // If the bullet has hit the asteroid
    if let body2Node = body2.node {
        if body2Node.position.y < self.size.height {
           // remove bullet and asteroid
        }           
    }           
}

好处是它删除了!从您的代码中,更清楚地将nil检查与您稍后使用的变量相关联.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读