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

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

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

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

Q&A

1回答

840閲覧

swiftのvelocityで速度を測れない

tein

総合スコア5

Swift

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

0グッド

0クリップ

投稿2019/12/24 04:52

編集2019/12/24 05:54

前提・実現したいこと

swiftで動物タワーバトルのようなゲームを製作しています。
落ちたノードが完全停止した時ノードが大きくなるということをまずは実現したいです。

どのようにしたら、速度を測ることができるでしょうか。

該当のソースコード

swift

1import Foundation 2import SpriteKit 3import GameplayKit 4// #A→SKPhysicsContactDelegate 5class GameScene: SKScene,SKPhysicsContactDelegate { 6 7 // オブジェクト群 8 var background = SKSpriteNode(imageNamed: "haikei") 9 var jimen = SKSpriteNode(imageNamed: "jimen") 10 var mimo = SKSpriteNode() 11 12 //ミーモのノードを作成する。 13 //let tabi = SKSpriteNode(imageNamed: "tabi") 14 15 override func didMove(to view: SKView) { 16 17 // #B→self.physicsWorld.gravityとself.physicsWorld.contactDelegate 18 // 重力の設定 19 self.physicsWorld.gravity = CGVector(dx:0,dy:-3.0) 20 // 衝突の後にdidBeginContactメソッドが呼ばれるよ!の設定 21 self.physicsWorld.contactDelegate = self 22 23 // 背景画像の設定 24 // background.anchorPoint = CGPoint(x:0,y:0) 25 background.position = CGPoint(x:0,y:0) 26 background.size = self.size 27 self.addChild(background) 28 29 // spaceshooterの配置 30 jimen.position = CGPoint(x:0,y:-700) 31 jimen.size = CGSize(width: 500, height: 100) 32 jimen.physicsBody = SKPhysicsBody(rectangleOf: jimen.frame.size) 33 //重力を無効にする 34 jimen.physicsBody?.affectedByGravity = false 35 //カテゴリ 36 // jimen.physicsBody?.categoryBitMask = 0x1 << 0 37 //衝突 38 // jimen.physicsBody?.collisionBitMask = 0x1 << 2 39 self.addChild(jimen) 40 41 // #C→block.physicsBody 42 // 岩石の配置 43 let names = ["tabi","aisatu","nougu","den"] 44 let index = Int(arc4random_uniform(UInt32(names.count))) 45 let name = names[index] 46 mimo = SKSpriteNode(imageNamed: name) 47 mimo.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "mimo"), size: mimo.self.size) 48 mimo.size = CGSize(width:150,height:150) 49 mimo.physicsBody?.contactTestBitMask = 1 50 mimo.position = CGPoint(x:0,y:600) 51 mimo.physicsBody = SKPhysicsBody(rectangleOf: mimo.frame.size) 52 //カテゴリ 53 // mimo.physicsBody?.categoryBitMask = 0x1 << 1 54 //衝突 55 //mimo.physicsBody?.collisionBitMask = 0x1 << 0 56 //重力を無効にする 57 mimo.physicsBody?.affectedByGravity = false 58 //衝突判定 59 mimo.physicsBody?.categoryBitMask = 0b0010 60 jimen.physicsBody?.categoryBitMask = 0b0001 61 mimo.physicsBody?.collisionBitMask = 0b0001 62 jimen.physicsBody?.collisionBitMask = 0b0001 63 jimen.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask 64 65 self.addChild(mimo) 66 } 67 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 68 69 } 70 //画面タッチ移動時の呼び出しメソッド 71 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { 72 73 //タッチした座標を取得する。 74 let location = touches.first!.location(in: self) 75 76 //タッチした位置まで移動するアクションを作成する。 77 mimo.run(SKAction.moveTo(x: location.x, duration: 0.0)) 78 79 } 80 81 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 82 let location = touches.first!.location(in: self) 83 let node = atPoint(location) as! SKSpriteNode 84 85 if(node.physicsBody != nil) { 86 //タッチしたノードを落とす。 87 node.physicsBody!.isDynamic = true 88 //重力を有効にする 89 mimo.physicsBody?.affectedByGravity = true 90 //タッチイベントを無効にする 91 UIApplication.shared.beginIgnoringInteractionEvents() 92 } 93 94 }
ここで速度を測る func didBegin(_ contact: SKPhysicsContact){ if (contact.bodyA.categoryBitMask < mimo.physicsBody!.categoryBitMask){          //ここで速度が0になったか確認する if (mimo.physicsBody?.velocity == CGVector(dx:0.0, dy:0.0)){ mimo.size = CGSize(width:300,height:150) } } } }

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

version9.2

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

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

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

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

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

guest

回答1

0

didBeginは衝突した時に呼ばれる関数ですので、衝突した瞬間は速度が0ではなく条件が一致しないのだと思われます。
updateなどに書いてみてください。

投稿2021/03/06 01:51

tedikuma1

総合スコア18

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問