2017-10-06 52 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'函數的代碼嗎? –