Swift:即使将动态设置为false,spritenode在碰撞过程中仍然是动态的?

时间:2015-04-12 21:35:40

标签: swift sprite-kit

好吧,所以我的精灵节点savior需要是静态的,这样当它与我的另一个节点chicken1发生碰撞时,它不会被翻转或翻转到其侧面。它需要保持正面朝上。

我在这里设置了savior

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 physics

    savior.physicsBody?.allowsRotation = false
    savior.physicsBody?.dynamic = false
    savior.physicsBody?.affectedByGravity = false
    savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

    savior.physicsBody?.categoryBitMask = ColliderType.Savior.toRaw()
    savior.physicsBody?.contactTestBitMask = ColliderType.Chicken1.toRaw()
    savior.physicsBody?.collisionBitMask = ColliderType.Chicken1.toRaw()


    self.addChild(savior)

正如您所看到的,我将allowsRotation设置为false并将dynamic设置为false,但仍然允许轮换,并且节点仍然是动态的。

当我开启查看物理实体时,我的另外2个静态节点有绿色物理实体,而savior有一个深蓝色物理实体,让我相信绿色是静态的,蓝色是动态的。这使得savior绝对是动态的。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在实际声明物理主体属性之前,您正在设置物理主体属性。首先声明它就像你已经做的那样

savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))

然后设置所有属性。