好吧,所以我对雪碧套件还比较陌生,我在斯威夫特工作。我有两个sprite节点,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)

我需要知道如何在这些对象之间进行碰撞检测(即,如果savior和chicken1接触,则执行此操作),最好不要使chicken1成为物理体。
当我制造一个物理体时,它突然变得不稳定,并移动其他物体。
如果没有一种方法可以在没有物理的情况下进行碰撞检测,我如何才能使chicken1物理体不受任何影响,直接穿过其他物理体?
编辑**************
因此,我遵循了beginner swift sprite kit - node collision detection help (SKPhysicsContact)并:
把我的班级改成了achicken1
类游戏场景:SKScene,skphysiccontactdelegate{
写了如下:
    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()
    }

}

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

最佳答案

您可以使用categoryBitMask完成此操作,并通过响应SKSceneContactDelegate自行处理碰撞。
这样可以为不同的节点设置不同的类别,并根据需要处理不同类别之间的冲突。
辅导的:
http://seodoa.com/2014/04/01/skphysicsbody-react-to-contact-but-not-to-collide/

关于swift - swift :无需制裁剪理物体即可进行 Sprite 碰撞检测?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29482521/

10-12 21:35