swift didbegincontactが呼ばれない

SpriteKitの衝突判定のデリゲートメソッドdidbegincontactが呼ばれなくてハマった。シーンにデリゲートの設定をして、衝突するオブジェクトそれぞれにcategoryBitMaskとcontactTestBitMaskを衝突判定させるように設定していて、なぜこれでデリゲートが呼ばれないのかと試行錯誤

失敗していたコードは下記のような感じ。

    var slowCarBody = SKSpriteNode(textture:sCar)
    slowCarBody.categoryBitMask = slowCarBitMask
    slowCarBody.contactTestBitMask = playerCarBitMask
    slowCar.physicsBody = slowCarBody
    gameNode.addChild(slowCar)

そして下記のような感じに修正するとデリゲートが呼ばれるようになった。

    var slowCarBody = SKSpriteNode(textture:sCar)
    slowCar.physicsBody = slowCarBody
    slowCarBody.categoryBitMask = slowCarBitMask
    slowCarBody.contactTestBitMask = playerCarBitMask
    gameNode.addChild(slowCar)

違いは、オブジェクトの判定サイズの設定と判定グループの設定の順番を入れ替えた点。physicsBodyをイニシャライズする前にカテゴリを設定しようとしているんだからそりゃ効かない。spriteノードを作ったから大丈夫だろうと無意識でいたので気づかなかった

コメントを残す

メールアドレスが公開されることはありません。