提问者:小点点

斯威夫特:不制作物理物体的精灵碰撞检测?


好的,所以我对精灵工具包相当陌生,我在Swift中工作。我有2个精灵节点,saviorchicken1savior有一个物理体,这就是我设置它的方式:

var saviorTexture = SKTexture(imageNamed: "1.png")
saviorTexture.filteringMode = SKTextureFilteringMode.Nearest

savior = SKSpriteNode(texture: saviorTexture)
savior.setScale(0.2)
savior.position = CGPoint(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.2)
savior.physicsBody?.dynamic = true
savior.physicsBody?.allowsRotation = false
savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

        self.addChild(savior)

chicken1目前没有物理实体:

var chickenTexture = SKTexture(imageNamed: "block1")

        chicken1 = SKSpriteNode(texture: chickenTexture)
        chicken1.setScale(0.75)
        chicken1.position = CGPoint(x: self.size.width * 0.38, y: self.size.height * 1.2)
        self.addChild(chicken1)

我需要知道如何在这些对象之间进行碰撞检测(即,如果救世主和小鸡接触,则执行此操作),最好不要使chicken1成为物理体。

当我把鸡做成一个物理物体时,它突然变得不稳定,并移动其他物体。

如果没有物理学就无法进行碰撞检测,我怎样才能使鸡肉1成为不受任何影响的物理体,并且直接穿过其他物理体?

编辑**************

所以我跟随初学者swift sprite kit -节点碰撞检测帮助(SKPhysicsContact)并拥有:

>

  • 将我的类更改为SK物理联系人代表

    类GameScene: SKScene, SK物理联系代表{

    写了以下内容:

        self.physicsWorld.contactDelegate = self
    
        savior.physicsBody?.categoryBitMask = saviorCategory
        savior.physicsBody?.contactTestBitMask = animalCategory
        savior.physicsBody?.collisionBitMask = 0
    
        chicken1.physicsBody?.categoryBitMask = animalCategory
        chicken1.physicsBody?.contactTestBitMask = saviorCategory
        chicken1.physicsBody?.collisionBitMask = 0
    
        func didBeginContact(contact: SKPhysicsContact) {
    
        var saviorPhysics: SKPhysicsBody
        var chicken1Physics: SKPhysicsBody
    
        if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask
        {
            saviorPhysics = contact.bodyA
            chicken1Physics = contact.bodyB
        }
        else {
            saviorPhysics = contact.bodyB
            chicken1Physics = contact.bodyA
        }
    
        if saviorPhysics.categoryBitMask == 0 && chicken1Physics.categoryBitMask == 1 {
            self.chicken1.removeFromParent()
        }
    
    }
    

    我运行了它,没有出现错误,但它不起作用。


  • 共1个答案

    匿名用户

    您可以使用categoryBitMask完成此操作,并通过响应SKSceneContactDelegate来自行处理冲突。

    这样你可以为不同的节点设置不同的类别,并随意处理不同类别之间的冲突。

    教程:

    http://SEO DOA . com/2014/04/01/skphysicsbody-react-to-contact-but-to-collide/