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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

818閲覧

同名のspritenodeの当たり判定を別々に取得したい。

afuroda

総合スコア36

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

1クリップ

投稿2020/01/23 04:24

前提・実現したいこと

swiftでskspriteNode(bullet)をTimerで1秒ごとに作成して、bullet以外のノードに当たるとremoveFromParent()でbulletを消すシューティングゲームを作っていますが、1つの画面上にbulletが複数存在する場合にどのAにノードが当たっても一番最初に作られたbulletが消えてしまいます。swiftのあたり判定では衝突したものそのもののnodeを取得する方法はないのでしょうか?

発生している問題・エラーメッセージ

同名のnodeを個別に取得したい

該当のソースコード

@objc func guntimer(){ let bullet = SKSpriteNode() bullet.size=CGSize(width: UIScreen.main.bounds.width/20.0, height: UIScreen.main.bounds.width/20.0) bullet.position=CGPoint(x: locationX, y: -UIScreen.main.bounds.height/2) bullet.physicsBody=SKPhysicsBody(rectangleOf: bullet.frame.size) bullet.color=UIColor.red bullet.physicsBody?.contactTestBitMask=2 bullet.physicsBody?.categoryBitMask=1 bullet.physicsBody?.collisionBitMask=2 bullet.physicsBody?.isDynamic=true bullet.physicsBody?.affectedByGravity=false bullet.name="bullet" self.addChild(bullet) if contact.bodyA.categoryBitMask == 2 || contact.bodyB.categoryBitMask == 2 { print(bulletRemoveNum) self.childNode(withName: "bullet")?.removeFromParent()

試したこと

個別にcategoryBitMaskをつけようとしましたが、衝突相手にも同じことをしてしまうと複雑になりすぎて断念しました。

補足情報(FW/ツールのバージョンなど)

Xcode 11.2.1

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

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

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

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

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

tomato879241

2021/03/07 04:00

SKNodeにはuserDataを設定できるので、それを使ったらどうでしょうか?
guest

回答1

0

ベストアンサー

contact.bodyA.node?で衝突したnodeを取得することができます。(Bの場合はbodyB)
contact.bodyA.node?.removeFromParent()とすると消えます。

投稿2021/03/06 16:48

tedikuma1

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問