質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

1627閲覧

Swiftで衝突判定が通らない

daigakusei

総合スコア18

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2015/09/30 23:33

編集2015/09/30 23:34

下記のサイトを参考にSwiftとSpriteBuilderを使用してiPhone向けのアプリを作っているのですが、衝突判定をする際に
func ccPhysicsCollisionBegin(pair: CCPhysicsCollisionPair!, hero: CCNode!, level: CCNode!) -> Bool {
println("heroとlevelが衝突しました")
return true
}
この書き方で成功したのですが、heroとlevel2(例として)の衝突メソッドを上と同じ書き方で
func ccPhysicsCollisionBegin2(pair: CCPhysicsCollisionPair!, hero: CCNode!, level2: CCNode!) -> Bool {
println("heroとlevel2が衝突しました")
return true
}
と書いても反応がありませんでした。メソッド名はオーバーライドしてないので適当にccPhysicsCollisionBegin2としたのですがエラーも特に起きず、反応がありません。
しかし、ccPhysicsCollisionBeginの方でlevelとlevel2を入れ替えて記述すると反応しましたがccPhysicsCollisionBegin2でlevel2をlevelを入れ替えてもこちらは反応しません。
やはり衝突判定は1つしかできないのでしょうか?もし2つでも出来るやり方があればどなたか教えて下さると助かりますm(_ _)m

https://www.makeschool.com/tutorials/build-flappy-bird-with-spritebuilder-and-cocos2d-in-swift/setting-up-collisions

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ccPhysicsCollisionBeginメソッドはdelegateに設定したオブジェクトに何かが衝突した場合に呼ばれるメソッドなので、適切に設定されていればlevelとlevel2のどちらのオブジェクトがheroと衝突してもこのメソッドが呼ばれるはずです。

ccPhysicsCollisionBeginメソッドの引数のlevelの中にそれぞれオブジェクトに設定したlevelが渡ってきますので、この引数でどのオブジェクトと衝突したかを判別して処理を分けます。

ccPhysicsCollisionBegin2が呼ばれないのはccPhysicsCollisionBeginというメソッドがSceneクラスで宣言されているCCPhysicsCollisionDelegateというProtocolで宣言されているメソッドだからです。
つまりメソッドの名前と引数の組み合わせを変えてしまうと呼ばれないということです。

投稿2015/10/01 07:12

jollyjoester

総合スコア1585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daigakusei

2015/10/02 02:46

なるほど!!詳しく解説して下さりありがとうございます(^^) 納得のいく解答だったのでベストアンサーにさせていただきました!
guest

0

勘で書きます。

何かと何かが衝突したときは、とにかくccPhysicsCollisionBeginが呼ばれ、
この中で、(引数などから)何と何が衝突したかを判定するのではないでしょうか?

サンプルでは、「何かと何かが衝突する」=「プレイヤと障害物が衝突する」に限定されるため、
何と何が衝突したか、の判定が省略されているんだと思います。(常にゲームオーバー)

投稿2015/10/01 02:08

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daigakusei

2015/10/02 02:50

ご解答ありがとうございます(^O^) 初めて質問させていただきましたがこんなに素早い対応して貰えるとは思いませんでした。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問