碰撞后Swift设置isdynamic为false

时间:2017-10-06 18:23:25

标签: swift xcode dynamic sprite-kit collision-detection

嘿伙计们我有一个问题。

在我的游戏中,我希望汤姆让物体(块)从天而降,然后当它们撞到地面或其他块时冻结/停留在原地/不再是动态的。

我创建了一个函数,我随机创建了一个让它们从天上掉下来的块。

 func spawnItems() {

    var item = SKSpriteNode()

        item = SKSpriteNode(imageNamed: "block3");
        item.name = "block";
        item.size = CGSize(width: 90, height: 90)
        item.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 89.8, height: 89.8))

    item.physicsBody?.isDynamic = true
    item.physicsBody?.affectedByGravity = true
    item.physicsBody?.allowsRotation = false
    item.physicsBody?.restitution = 0

    item.physicsBody?.categoryBitMask = ColliderType.BLOCK
    item.physicsBody?.collisionBitMask = ColliderType.PLAYER | ColliderType.BLOCK | ColliderType.GROUND

    item.physicsBody?.contactTestBitMask = ColliderType.PLAYER | ColliderType.BLOCK | ColliderType.GROUND

    item.zPosition = 30;
    item.anchorPoint = CGPoint(x: 0.5, y: 0.5);
    item.position.x = CGFloat(getKoordinates());
    item.position.y = 800;

self.scene?.addChild(item)
}


 override func didMove(to view: SKView) {

    Timer.scheduledTimer(timeInterval: TimeInterval(1), target: self, selector: #selector(GameplayScene.spawnItems), userInfo: nil, repeats: true);



}

现在我想将isDynamic设置为false,当一个块撞击地面/块时它会保持原位。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您需要确保您的课程为SKPhysicsContactDelegate,您将场景的physicsworld delegate属性设置为self,然后您需要实施didBegin(contact:)方法当正确设置的2个精灵(通过他们的contactTestBitMaskcategoryBitMask)进行联系时,可以调用。