【iPhoneゲーム開発8】衝突イベントを実装してみた

こんにちは、のっくんです。

ゲーム開発の記事も早くも8つ目。

今日は、コリジョンイベント(Collision Event)についてです。

以下のようにアプリを実装してみました。

弾が敵に当たった後に敵が死んでいます。

カエルはその場で透明になり、ハエは落下しています。

この実装はコリジョンイベントを利用することで実現しています。

コリジョンイベントとは、その名の通り、キャラクター同士が衝突・接触した場合のイベントです。

Spritekitでは衝突イベントを管理するために以下の3つのマスクを用意しています。

  • categoryBitMask、自分のカテゴリー。弾と敵。
  • contactTestBitMask、接触した時にイベントを発生させる相手。弾が敵と接触するように設定する。
  • collisionBitMask、衝突する相手。デフォルトは0xFFFFFFFF、すべての物体と衝突するようになっている。

BitMaskを設定する

まずカテゴリーを列挙型で設定します。

次にShotクラスでは以下のようにbulletカテゴリーを設定、enemyと接触した時にイベントを発生するようにしました。

カエルやハエのFrog、Flyクラスでは以下のようにenemyカテゴリーを設定しました。

接触時のイベント

カテゴリーが設定できたところで接触時のイベントを実装していきます。

SKPhysicsContactDelegateをGameSceneの中でインプリします。

didBegin(_ contact: SKPhysicsContact) {}が使えるようになるのでこの中で接触イベントを書いていきます。

弾のカテゴリーを取得。

didBeginの中では、衝突した物体AとBが得られますが、弾がどちらなのかは分かりません。

ですので、Aがだった場合とBが弾だった場合でそれぞれ条件分けします。

これでoneが弾、twoが判定対象として設定されました。

次にtwoが敵だった時の処理を書いていきます。

弾を消して、敵がカエルもしくはハエだったらそれぞれ死ぬようにしました。

弾を貫通させる

動画をよく見てもらうと分かりますが、死んだカエルは透明になり弾が貫通しています。

着弾直後は透明になって見えますが、存在しないことになっています。

すべての接触や衝突を回避するために、カエルが死ぬ時にはcategoryBitMaskとcollisionBitMaskを0にしています。

終わりに

いかがでしたでしょうか。

接触や衝突イベントはゲームを作る上で欠かせない要素だと思います。

それでは。

【iPhoneゲーム開発9】ライフポイントとゲームオーバーの設定