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

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

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

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

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

Swift

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

Q&A

0回答

855閲覧

spritekitの衝突判定didBeginが作動しない

tsuneet

総合スコア16

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/10/13 10:06

編集2022/01/12 10:55

いつもお世話になっております。swift4でゲーム開発中のものです。
spritekitを使って2つの物体の衝突判定をしたいのですが、うまく認識されません。
下記のコードにfunc createEnemy()の関数を作って2つのノード「ピペットノード(sprite1)」と「ビーカーノード(sprite2)」を用意しています。それぞれ実機のシミュレーションで物体の表示は出来て、ピペットノードが落下してビーカーノードにぶつかって無事に衝突するまではうまくいくのですが、衝突したときに起動するはずのdidBeginがうまく作動してくれません。(didbigin内にあるprintメッセージが表示されません。)何か足りない部分があるのでしょうか。色々試してみましたが長時間進まない状態になってしまい質問させて頂きました。何卒よろしくおねがいします。

import Foundation import SpriteKit import CoreMotion class playScene: SKScene,SKPhysicsContactDelegate { ** func createEnemy(){ //ピペットノードの設定 let texture = SKTexture(imageNamed:"pipet") let sprite1 = SKSpriteNode(texture:texture) sprite1.position = CGPoint(x:130,y:880) sprite1.size=CGSize(width:texture.size().width*0.5,height:texture.size().height*0.5) sprite1.physicsBody = SKPhysicsBody(texture:texture,size:sprite1.size) sprite1.physicsBody?.isDynamic = true self.addChild(sprite1) //ビーカーノードの設定 let texture2 = SKTexture(imageNamed: "bika") let sprite2 = SKSpriteNode(texture:texture2) sprite2.position = CGPoint(x:130,y:150) sprite2.size=CGSize(width:texture2.size().width*0.5,height:texture2.size().height*0.5) sprite2.physicsBody = SKPhysicsBody(texture:texture2,size:sprite2.size) sprite2.physicsBody?.isDynamic = false self.addChild(sprite2) //衝突処理 sprite1.physicsBody?.categoryBitMask=0b0001 sprite2.physicsBody?.categoryBitMask=0b0010 sprite1.physicsBody?.collisionBitMask=0b0010 sprite2.physicsBody?.collisionBitMask = 0b0001 sprite1.physicsBody?.contactTestBitMask=0b0010 sprite2.physicsBody?.contactTestBitMask=0b0001 //デリゲート先に自分を設定する self.physicsWorld.contactDelegate=self print("衝突しないのか…") } func didBegin(_contact: SKPhysicsContact) { print("衝突開始しました!") } ** func endChangeTimer() { var owariCount = 0 let timerMini = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in owariCount+=1 if owariCount>2 { self.changeScene() } } } override func didMove(to view: SKView) { //加速度センサーの計測開始 motionMgr.startAccelerometerUpdates() motionMgr.accelerometerUpdateInterval=0.05//何秒おきにデータを計測するかの指示 // var jyohou:Double! = self.motionMgr.accelerometerData?.acceleration.x //敵を発生させて落下させるメソッド:1秒に1回発動 let timerTeki = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (Timer) in self.createEnemy() } self.setupScoreLabel()//右上スコア表示発動 //自分のバンドの設定 myBand.name="myBand" self.addChild(myBand) myBand.size=CGSize(width:60,height:30) myBand.position=CGPoint(x:300,y:300) //↓自分の位置を刻々と変化させる let timer9 = Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { (Timer) in var xi=self.motionMgr.accelerometerData!.acceleration.x var yi=self.motionMgr.accelerometerData!.acceleration.y var xp=self.myBand.position.x // print(self.motionMgr.accelerometerData!.acceleration.x) self.myBand.position=CGPoint(x:Double(xp)+xi*50,y:Double(self.myBand.position.y)+yi*50) } //パーティクルを発生させるメソッド //ポイントはparticleの名前の最後に!ビックリマークを入れること。!なぜこれが必要なのか?アンラッピングなど調べる。ass0624 let particle = SKEmitterNode(fileNamed:"MyParticle.sks") self.addChild(particle!) // particle!.position = CGPoint(x:-100,y:-300) particle!.position = CGPoint(x:myBand.position.x,y:myBand.position.y) let timerParticle = Timer.scheduledTimer(withTimeInterval: 0.02, repeats: true) { (Timer) in particle!.position = CGPoint(x:self.myBand.position.x,y:self.myBand.position.y) } } }

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問