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

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

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

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

Swift

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

iPhone

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

Q&A

解決済

1回答

563閲覧

coreMotionの加速度調整について

magiee

総合スコア28

Xcode

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

Swift

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

iPhone

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

0グッド

1クリップ

投稿2020/04/11 02:56

前提・実現したいこと

現状、coreMotionを使用しているので、傾けた角度によって画像が移動するスピードが変化するのですが、
傾けた際のスピードを遅くし、かつ滑らかに動かしたいです。
(90度くらいに傾けても、ゆっくり落ちるようにしたいです)

どこのコードを修正すれば良いのか、それとも新たなコードが必要になってくるのか、分かりません。

ご教授のほど、よろしくお願い致します。

該当のソースコード

import UIKit import CoreMotion class ViewController: UIViewController { @IBOutlet weak var syabondama: UIImageView! let cmManager = CMMotionManager() let scrSize: CGSize = UIScreen.main.bounds.size let mag: Double = 20.0 var vx, vy: Double? override func viewDidLoad() { super.viewDidLoad() vx = 0.0 vy = 0.0 startGame() } func startGame() { cmManager.deviceMotionUpdateInterval = 0.05 let handler: CMDeviceMotionHandler = { (motionData: CMDeviceMotion?, error: Error?) -> Void in self.stepGame(motionData: motionData, error: error) } cmManager.startDeviceMotionUpdates(to: OperationQueue.main, withHandler: handler) } func stepGame(motionData: CMDeviceMotion?, error: Error?) { var xMin, xMax, yMin, yMax: Int xMin = Int(syabondama.frame.width / 2) xMax = Int(scrSize.width) - xMin yMin = Int(syabondama.frame.height / 2) yMax = Int(scrSize.height) - yMin if let motion = motionData { let gravity = motion.gravity vx = vx! + gravity.x * mag vy = vy! - gravity.y * mag var x: Int = Int(Double(syabondama.center.x) + vx!) var y: Int = Int(Double(syabondama.center.y) + vy!) if (x < xMin) { x = xMin; vx = 0.0 } else if (x > xMax) { x = xMax; vx = 0.0 } if (y < yMin) { y = yMin; vy = 0.0 } else if (y > yMax) { y = yMax; vy = 0.0 } syabondama.center = CGPoint(x: x,y: y) } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

試した事

func startGame() { cmManager.deviceMotionUpdateInterval = 0.05

の0.05の部分を0.8にすると、スピードは落ちるのですが、
カタカタと動き、滑らかに動きません。

使用している言語

swift
Xvode 11.4

ご教授のほど、よろしくお願い致します。

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

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

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

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

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

TsukubaDepot

2020/04/11 03:15

ざっと眺めただけですが、 let mag: Double = 20.0 この20の値を調節したらどうでしょうか。
magiee

2020/04/11 04:08

let mag: Double = 20.0 の数値を調整すれば良かったのですね。 単純なことを聞いてしまい、申し訳ございません。 ありがとうございます。
magiee

2020/04/11 04:09

ベストアンサーに選ばさせていただきたいので、恐縮ではございますが、回答への記載のほどよろしくお願いいたします。
TsukubaDepot

2020/04/11 04:27

私は提案しただけで(ちょうどいま検証はやりましたが)、解決されたのは質問者さんなので、どこをどのようにして解決したのか書かれて自己解決にした方がいいと思いますが、いかがでしょうか。
magiee

2020/04/11 04:41

かしこまりました。配慮していただきありがとうございます。
guest

回答1

0

自己解決

@IBOutlet weak var syabondama: UIImageView!
let mag: Double = 1.0  //に修正。

func startGame() {
cmManager.deviceMotionUpdateInterval = 0.03 //に修正。

この2つを修正すると、個人的に求める動きとなりました。
ありがとうございます。

投稿2020/04/11 04:43

magiee

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問