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

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

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

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

Q&A

0回答

830閲覧

速度を計るための方法

tein

総合スコア5

Swift

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

0グッド

0クリップ

投稿2019/12/18 01:37

編集2019/12/19 03:11

前提・実現したいこと

swiftで動物タワーバトルのようなゲームを作っています。
今、実現したいことは落ちる物の速度を計り、地面に落ちた後、完全に停止したら物の大きさが変わるというプログラムです。
どのようにしたら、mimoが完全に停止したことが分かるのかが知りたいです。

該当のソースコード

swift

ソースコード

import Foundation import SpriteKit import GameplayKit // #A→SKPhysicsContactDelegate class GameScene: SKScene,SKPhysicsContactDelegate { // オブジェクト群 var background = SKSpriteNode(imageNamed: "haikei") var jimen = SKSpriteNode(imageNamed: "jimen") var mimo = SKSpriteNode() //ミーモのノードを作成する。 //let tabi = SKSpriteNode(imageNamed: "tabi") override func didMove(to view: SKView) { // #B→self.physicsWorld.gravityとself.physicsWorld.contactDelegate // 重力の設定 self.physicsWorld.gravity = CGVector(dx:0,dy:-3.0) // 衝突の後にdidBeginContactメソッドが呼ばれるよ!の設定 self.physicsWorld.contactDelegate = self // 背景画像の設定 // background.anchorPoint = CGPoint(x:0,y:0) background.position = CGPoint(x:0,y:0) background.size = self.size self.addChild(background) // spaceshooterの配置 jimen.position = CGPoint(x:0,y:-700) jimen.size = CGSize(width: 500, height: 100) jimen.physicsBody = SKPhysicsBody(rectangleOf: jimen.frame.size) //重力を無効にする jimen.physicsBody?.affectedByGravity = false //カテゴリ // jimen.physicsBody?.categoryBitMask = 0x1 << 0 //衝突 // jimen.physicsBody?.collisionBitMask = 0x1 << 2 self.addChild(jimen) // #C→block.physicsBody // 岩石の配置 let names = ["tabi","aisatu","nougu","den"] let index = Int(arc4random_uniform(UInt32(names.count))) let name = names[index] mimo = SKSpriteNode(imageNamed: name) mimo.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "mimo"), size: mimo.self.size) mimo.size = CGSize(width:150,height:150) mimo.physicsBody?.contactTestBitMask = 1 mimo.position = CGPoint(x:0,y:600) mimo.physicsBody = SKPhysicsBody(rectangleOf: mimo.frame.size) //カテゴリ // mimo.physicsBody?.categoryBitMask = 0x1 << 1 //衝突 //mimo.physicsBody?.collisionBitMask = 0x1 << 0 //重力を無効にする mimo.physicsBody?.affectedByGravity = false //衝突判定 mimo.physicsBody?.categoryBitMask = 0b0010 jimen.physicsBody?.categoryBitMask = 0b0001 mimo.physicsBody?.collisionBitMask = 0b0001 jimen.physicsBody?.collisionBitMask = 0b0001 jimen.physicsBody?.contactTestBitMask = mimo.physicsBody!.categoryBitMask self.addChild(mimo) } override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { } //画面タッチ移動時の呼び出しメソッド override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) { //タッチした座標を取得する。 let location = touches.first!.location(in: self) //タッチした位置まで移動するアクションを作成する。 mimo.run(SKAction.moveTo(x: location.x, duration: 0.0)) } override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { let location = touches.first!.location(in: self) let node = atPoint(location) as! SKSpriteNode if(node.physicsBody != nil) { //タッチしたノードを落とす。 node.physicsBody!.isDynamic = true //重力を有効にする mimo.physicsBody?.affectedByGravity = true //タッチイベントを無効にする UIApplication.shared.beginIgnoringInteractionEvents() } } func didBegin(_ contact: SKPhysicsContact){ if (contact.bodyA.categoryBitMask < mimo.physicsBody!.categoryBitMask){ if (mimo.physicsBody?.velocity == CGVector(dx:0, dy:0)){ mimo.size = CGSize(width:300,height:150) } } } }

試したこと

CGVectorなどで試しています。

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

version9.2

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

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

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

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

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

y_waiwai

2019/12/18 04:20

で、しつもんはなんでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問