当前位置: 首页 > 知识库问答 >
问题:

精灵套件碰撞错误- Swift

漆雕育
2023-03-14

我是IOS开发的新手,目前在didBeginContact方法中遇到一些sprite工具包冲突问题。

如果一个碰撞的物理物体被移走了,我如何摆脱或者停止didBeginContact的运行?例:一颗子弹与两个重叠的敌人相撞。因为子弹击中第一个敌人并被摧毁,所以在第二个敌人上运行的碰撞检查抛出异常,因为子弹不再存在。

我试过检查nil和NSNULL值,但运气不好。我收到的错误代码是“线程1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOIP,子代码=0x0)”,并在尝试检查类别位掩码时发生(因为鱼雷不再存在)。

代码:

    var bodyA:SKPhysicsBody = contact.bodyA
    var bodyB:SKPhysicsBody = contact.bodyB


    if(contact.bodyA.categoryBitMask == alienCategory && contact.bodyB.categoryBitMask == alienCategory){
        return
    }


    if((bodyA.categoryBitMask == alienCategory) && (bodyB.categoryBitMask == photonTorpedoCategory)){
        torpedoDidCollideWithAlien(bodyA.node as SKSpriteNode)

    }

    var currTorpedo:SKSpriteNode = contact.bodyB.node as SKSpriteNode
    var currAlien:SKSpriteNode = contact.bodyA.node as SKSpriteNode

    currTorpedo.removeFromParent()
    currAlien.removeFromParent()


}

func torpedoDidCollideWithAlien(alien:SKSpriteNode){

    aliensDestroyed++
    label.text = ("Current Score: " + String(aliensDestroyed))


}

共有1个答案

樊飞飙
2023-03-14

也许你可以把鱼雷从现场移走推迟到下一个场景“更新”。你可以将鱼雷标记为禁用/不活动,这样它就不会影响你的第二个重叠敌人。类似这样:

class YourScene: SkScene {

    // Array of disabled torpedos
    var disabledTorpedos = SKSpriteNode()[]

    func didBeginContact(contact: SKPhysicsContact) {
        var bodyA:SKPhysicsBody = contact.bodyA
        var bodyB:SKPhysicsBody = contact.bodyB


        if(contact.bodyA.categoryBitMask == alienCategory && contact.bodyB.categoryBitMask == alienCategory){
            return
        }


        if((bodyA.categoryBitMask == alienCategory) && (bodyB.categoryBitMask == photonTorpedoCategory)){
            torpedoDidCollideWithAlien(bodyA.node as SKSpriteNode)

        }

        var currTorpedo:SKSpriteNode = contact.bodyB.node as SKSpriteNode
        var currAlien:SKSpriteNode = contact.bodyA.node as SKSpriteNode

        // Created a new photonTorpedoDisabledCategory so the torpedo cannot hit a 2nd alien
        currTorpedo.physicsBody.categoryBitMask = photonTorpedoDisabledCategory
        disabledTorpedoes.append(currTorpedo)
        // Hide torpedo from scene
        currTorpedo.hidden = true

        currAlien.removeFromParent()
    }

    override func update(currentTime: NSTimeInterval) {

        // loop through disabledTorpedos array and removeFromParent

    }

 }
 类似资料:
  • 我已经寻找并找到了单个碰撞的答案,但我正在寻找一种检测多种类型的碰撞的方法。我正在制作一个游戏,其中有3个我想要的碰撞。用户飞机与敌方子弹相撞,用户子弹与敌机相撞(我已经工作过),敌方子弹与用户子弹相撞。我已经设置并更正了所有类别BitMask和contactTestBitMask。这是我的委托方法。

  • 我在雪碧套装里做一个复古街机游戏。我是这个框架的新手,所以我每分钟都发现新的东西,但很难解决这个问题,我在过去的几个小时里一直试图解决这个问题。 首先是游戏的屏幕转储和用红色勾勒出的物理实体。 http://i.imgur.com/KcbMVn4.png?1 当你按下拳击手套按钮时,大家伙通过这种方法进行拳击 } 我的碰撞代理如下所示 我这里的问题是,让didBeginContact记录命中的唯一

  • 我正在使用Sprite Kit中的碰撞检测。它在起作用,防止我的精灵穿越路径。然而,我在didBeginContact中没有收到通知:而且我似乎无法控制物理引擎在发生碰撞时的响应。 我让各种汽车(SKSpriteNodes)使用SKAction followPath沿着以下路径行驶:as offset:oriento path:duration: 以前,如果两辆车相交,它们都会像往常一样继续行驶,

  • 这就是正在发生的事情,游戏不断停止,因为两个圆圈相互碰撞,我正在尝试通过确保ID是正方形ID来防止这种情况,我试图让圆圈碰撞在一起,而忽略碰撞,但它没有这样做,我不知道如何确切地阻止它相互碰撞,只允许它与正方形碰撞。 基本上我想阻止这个圆与另一个圆碰撞,并允许它与正方形碰撞。 任何帮助都会很好谢谢 游戏引擎引擎类 这是我在扩展game.engine.engine包的game类中检查冲突的地方。 游

  • 刚开始在pygame中的精灵碰撞。运行此代码时,会弹出一个属性错误,指出“组”对象没有属性 “rect”。我不知道为什么会发生此错误。建议?

  • 我在PyGame中创建了两个简单的精灵,其中一个是雨伞,另一个是雨滴。雨滴被添加到一个名为< code>all_sprites的sprite组中。伞精灵有自己的组,名为< code>Umbrella_sprite 雨滴从屏幕顶部“落下”,如果其中一个碰到雨伞/与雨伞碰撞..雨滴应该被删除了。但是除了特定雨滴之外,所有其他雨滴都受此影响。