Как изменить fillColor SKShapeNode в контактной функции didBegin?

Моя цель — изменить fillColor SKShapeNode, как только этот узел сталкивается с другим узлом. Я знаю, как редактировать физическое тело в точке столкновения, но мне не удалось понять, как изменить такие свойства, как 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

, но я не знаю, как изменить fillColor bodyB, например, на красный.

Я ценю вашу помощь!


person Joy Lucas    schedule 02.05.2020    source источник


Ответы (1)


Если у вас есть SKNode node, который, как вы знаете, должен быть SKShapeNode, вы можете разыграть его следующим образом:

if let shapeNode = node as? SKShapeNode {
    shapeNode.fillColor = .red
}
person bg2b    schedule 03.05.2020
comment
Для node я получаю сообщение об ошибке: «узел» статического члена не может использоваться в экземпляре типа «GameScene». Вставьте SKNode. Поэтому я изменил его на contact.bodyB.node, но знаю, что оператор if вообще не вызывается. - person Joy Lucas; 03.05.2020
comment
node был просто примером. Узел формы в коллизии может быть либо из bodyA, либо из bodyB. Вы должны изучить битовые маски или имена категорий или что-то еще, чтобы определить, какой узел является правильным. Если узел, на который вы пытаетесь сослаться as? на узел формы, не относится к этому типу, приведение не будет успешным, и if не будет выполнено. - person bg2b; 03.05.2020