2017-10-06 83 views
0

嘿家伙我有一个问题。碰撞后迅速设置isdynamic为false

在我的游戏中,我想让汤姆让物体(块)从天而降,然后当它们撞到地面或另一个块冻结/保持原位/不再动态时。

我创建了一个函数,我随机创建了一个让它们从天而降的块。

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,当块撞击地面/块时,它会保持原位。

我该怎么做?

回答

0

你需要确保你的类是SKPhysicsContactDelegate,你有场景的physicsworld delegate属性设置为self,然后你需要通过他们的contactTestBitMask实现didBegin(contact:)方法将被调用2时的精灵,它的设置是否正确(和categoryBitMask)联系。

+0

是的,我试过。但问题是,当对象碰撞时,每次我将isdynamic设置为false时,将来创建的每个其他项目也会将isdynamic设置为false。你懂我的意思吗? – Chief

+0

你可以通过编辑问题发布你的'didBegin'函数的代码吗? –