まとまりのないブログ

something which something is something

swift

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ノードを作ったから大丈夫だろうと無意識でいたので気づかなかった

-swift

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

メインビューとサブビューの座標の違い

メインビューでaddsubviewにてuiviewを追加して、ボタンを押したら別のビューが下からビョーンって出てくるようなものを考えていたが、座標の問題で困った。メインビューの座標とサブビューの座標は …

no image

swift – itunes store にサインイン画面が何度も表示される

iPhoneアプリ開発中にStoreKitの購入処理をデバッグしていたら、アプリ起動時にサインインを求められる画面が表示されるようになった。これが表示されるようになった原因は、直前の購入処理がうまくい …

no image

touchesBeganとtouchesEndedの間にある遅延について

iOSでtouchesBeganイベントが呼ばれてtouchesEndedが呼ばれるまでの間に約0.4秒ほどの遅延があることがわかった。(マシンの調子が悪い時は0.5秒ほど) touchesBegan …

no image

swift – SKNodeからSKSpriteNodeへ変換

SKViewからnodeAtPointで取得したノードはSKNodeとして受け取るため、それをSKSpriteNodeにキャストする。Objective-cの時はAnyObjectに突っ込んでからキャ …