嘿伙计们我有一个问题。
在我的游戏中,我希望汤姆让物体(块)从天而降,然后当它们撞到地面或其他块时冻结/停留在原地/不再是动态的。
我创建了一个函数,我随机创建了一个让它们从天上掉下来的块。
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 :(得分:0)
您需要确保您的课程为SKPhysicsContactDelegate
,您将场景的physicsworld delegate
属性设置为self
,然后您需要实施didBegin(contact:)
方法当正确设置的2个精灵(通过他们的contactTestBitMask
和categoryBitMask
)进行联系时,可以调用。