答えてズンズン!:速度と加速度と傾きのお話

サルでき.jp > 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) > 答えてズンズン!:速度と加速度と傾きのお話

2010/02/09 09:00 投稿先 11.サルにもできるiPhoneアプリの作り方(旧アメブロ記事) 投稿者 カワサキ タカシ

いぶんご無沙汰しておりました。

答えてズンズン!

この企画自体を知らない
サルできビギナーもしくは通りすがりの方に少しだけ説明しておくと、
読者の方がフト感じた疑問をズバリお答するという身も蓋もないお題丸投げ企画でございます。

お久しぶりと言うことは
・このブログであまり質問が無かったか
・っていうかブログがアプリ開発から離れているので質問のしようが無かったか
・両方か

いろいろ根本的な問題はあるかと思いますが、兎にも角にも久々に登場のこの企画。

さっそく行ってみましょう!
答えて~ズン!ズン!

まーのすけさんからのご質問】


はじめまして!

1週間前にこのブログを見つけ、駆け足で読ませていただいています。

速度と加速度を足して、位置情報にプラス。
もちろんCGPointMakeも忘れずに書いて、愛機iPod touchへビルド!

…っと、ボールが画面の上へ上って行き、あっという間に消えて行きました…(T_T)
何度やっても重力に逆らってボールは昇って行きます…ウチって宇宙空間?

何度もコードを見直してvy – accelYとするところをプラスしていた事を発見!
やっとボールを画面内から逃さないゲームが出来るようになりました。

でも…「速度に加速度をプラス」なのに、なぜaccelYは引くのか、理解が出来ません。
愚かな私に、お導きを…

って、今頃コメントでは遅いでしょうか?

参照記事 : ドムドムその7:ImageViewを動かしてみよう


遅くないデス!
遅くないですよ~まーのすけさん!

サルできは常に初心者です! …の味方です!

…コホン。
今読み返すと長々長々書いていますね~、この回。

このアニメーションの計算式はとにかく実用性が高いので、
特にアニメーションに興味が無い人でもぜひ覚えてもらいたかったりしまして。
溢れんばかりの思い入れを叩き込んで書いて書いて、、、

肝心なところを軽やかにスルー。
今回の悲劇を産んでしまったわけです。犯人はタワシだ。

さて、一回図示してみましょうか。
その方が案外さっくりわかったりしますので。

ドムドム、その部分だけ抜粋
答えてズンズン!:速度と加速度と傾きのお話

こんな感じですかね。
この段階で気を付けるのは一点だけ。

ビューは左上が座標ゼロということ。
X=0、Y=0の場所は左上にあります。

まぁFlashもHTMLも左上基準ですので、業界的にはそういうものなのでしょうが、
学校で方程式習ったときは真ん中、もしくは左下でしたよね。基準って。

で、このまま考えて行くとややアクロバティックな思考が必要になりますので、
バラします。

まずは。

X軸について
答えてズンズン!:速度と加速度と傾きのお話
<クリックで拡大>

まーのすけさんはドムドムその7でのご質問でしたので、
おそらく1個前の記事はご覧頂いたかと思いますが、
ドムドムその6:3軸加速度センサーを組み込もう

この仕組みには大きく分けると2つの力が関わっています。

ひとつは、ボールを動かすための力、「速度」「加速度」「座標」
もうひとつは、iPhoneの傾きで発生する力、「3軸加速度」

図を見ていただきたいのですが、
X軸については、
どちらも右をプラス、左をマイナスで計算しています。

一方。

Y軸について
答えてズンズン!:速度と加速度と傾きのお話
<クリックで拡大>

こっちは。
センサーは上がプラス、速度は下がプラス
という「ねじれ現象」が起きています。

なんてこったい。

この状態で、
「加速度センサーの値」をボールを動かす「加速度」に置き換えて「速度」に足してしまうと、
iPhoneを上に傾ければ傾けるほど、
ボールが下方向にすっ飛んで行ってしまう。

という大変気持ち悪い動きになってしまうわけです。

そこで、iPhoneの加速度センサーから得た値を
プラスマイナス逆にして加えています。
(平たく言うと引いています)

これが、X軸の計算式とY軸の計算式が足し引き逆になっている理由です。

まーのすけさん、いかがでしょう?
わかってしまうと「ナルホド!」って感じの内容だったのではないでしょうか。
(またワタシが独り合点しているだけの可能性がありますので、その場合はまたコメントくださいね!)

当ブログではみなさまからのご質問、リクエスト等を募集しております。
「ここがよくわかんない」「こんな機能を作ってみて」などがございましたら、
適当なコメント欄に記入しておいてください。
ネタの隙間でお答えします。

それでは次回お会いしましょう。

答えて~ズン!ズン!

関連する記事:


Advertisement