Определить только один контакт SpriteKit - PullRequest
0 голосов
/ 11 марта 2020

Основной вопрос: как определить только один контакт?

часть кода:

extension GameScene : SKPhysicsContactDelegate {


func didBegin(_ contact: SKPhysicsContact) {
    let bodyA = contact.bodyA.categoryBitMask
    let bodyB = contact.bodyB.categoryBitMask
    let ball = BitmaskCategory.ball
    let bucket = BitmaskCategory.bucket



    if bodyA == ball && bodyB == bucket || bodyA == bucket && bodyB == ball {
        print("contact")
//            block.run(SKAction.repeatForever(blockInstanse.rotateBlock(block: block)))

    }
}} 

Когда я кладу мяч в ведро , у меня есть это output , потому что мяч имеет подпрыгивающий эффект. Хочу написать какую-нибудь логику c в этой забаве c, но я не могу, потому что у меня несколько контактов. Пытался изменить ball.physicsBody? .CategoryBitMask в состоянии "если", но безуспешно. Пожалуйста, помогите ...

1 Ответ

0 голосов
/ 11 марта 2020

Ваш мяч или ведро могут установить флаг на первом контакте, вы можете проверить внутри didBegin и запустить действие, если оно истинно, например:

var isFirstContact = true

func didBegin(_ contact: SKPhysicsContact) {
    let bodyA = contact.bodyA.categoryBitMask
    let bodyB = contact.bodyB.categoryBitMask
    let ball = BitmaskCategory.ball
    let bucket = BitmaskCategory.bucket



    if bodyA == ball && bodyB == bucket || bodyA == bucket && bodyB == ball {
        if isFirstContact {
            isFirstContact = false
            // block.run(SKAction.repeatForever(blockInstanse.rotateBlock(block: block)))
        }
    }
}} 
...