如何在 didBegin 接触函数中更改 SKShapeNode 的 fillColor?
How to change the fillColor of a SKShapeNode within the didBegin contact function?
我的目标是在 SKShapeNode 与另一个节点发生碰撞时立即更改该节点的 fillColor。我确实知道如何在碰撞点编辑物理体,但我无法弄清楚如何更改节点的 fill- 或 strokeColor 等属性。
SKShapeNode:
func addBrick() -> SKShapeNode {
let brick = SKShapeNode(rect: CGRect(x: -100, y: -20, width: 200, height: 40), cornerRadius: 20)
brick.fillColor = .blue
brick.strokeColor = .blue
brick.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 200, height: 40))
brick.position = CGPoint(x: 0, y: -50)
brick.zPosition = 2
brick.physicsBody?.categoryBitMask = BrickCategory
brick.physicsBody?.collisionBitMask = PlayerCategory
brick.physicsBody?.contactTestBitMask = PlayerCategory
return brick
}
然后我测试玩家和积木之间的接触:
func didBegin(_ contact: SKPhysicsContact) {
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch contactMask {
case PlayerCategory | BrickCategory:
print("")
default:
print("Unknown collision")
}
}
我知道我可以使用
对物理体本身进行更改
contact.bodyB.node?.//make changes here
,但我不知道如何将 bodyB 的 fillColor 更改为红色。
感谢您的帮助!
如果你有一个你知道应该是 SKShapeNode
的 SKNode
node
,那么你可以像这样转换它:
if let shapeNode = node as? SKShapeNode {
shapeNode.fillColor = .red
}
我的目标是在 SKShapeNode 与另一个节点发生碰撞时立即更改该节点的 fillColor。我确实知道如何在碰撞点编辑物理体,但我无法弄清楚如何更改节点的 fill- 或 strokeColor 等属性。
SKShapeNode:
func addBrick() -> SKShapeNode {
let brick = SKShapeNode(rect: CGRect(x: -100, y: -20, width: 200, height: 40), cornerRadius: 20)
brick.fillColor = .blue
brick.strokeColor = .blue
brick.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 200, height: 40))
brick.position = CGPoint(x: 0, y: -50)
brick.zPosition = 2
brick.physicsBody?.categoryBitMask = BrickCategory
brick.physicsBody?.collisionBitMask = PlayerCategory
brick.physicsBody?.contactTestBitMask = PlayerCategory
return brick
}
然后我测试玩家和积木之间的接触:
func didBegin(_ contact: SKPhysicsContact) {
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch contactMask {
case PlayerCategory | BrickCategory:
print("")
default:
print("Unknown collision")
}
}
我知道我可以使用
对物理体本身进行更改contact.bodyB.node?.//make changes here
,但我不知道如何将 bodyB 的 fillColor 更改为红色。
感谢您的帮助!
如果你有一个你知道应该是 SKShapeNode
的 SKNode
node
,那么你可以像这样转换它:
if let shapeNode = node as? SKShapeNode {
shapeNode.fillColor = .red
}