スポンサー


    ウェブデザイン基礎講座

    フォトショップ講座

    HTML&CSS講座

    グラフィック講座

    Flash講座

    3D講座

    ウェブプログラミング講座

    サイトメンテナンス講座

    サイト紹介

    スペシャルリンク

サイト内検索

 メールマガジン

テクニック

HomeFlash講座 > Flashでみる重力という概念

Flashでみる重力という概念

投稿日:<2006年6月20日>   レベル:中級    ソフトウェア:Flash


どんな物語もどこかに始まりがあります、そして、今回の話は、偉大なるアイザック・ニュートンさんと一緒に始まります。ニュートンの理論は我々の周りで起こる普遍的なできごとを説いています。このシリーズでは、Flashを使って、物理という概念を表現していきたいと思います。まず、重力ということから始めてみましょう。

チュートリアルでのアルゴリズムと考え方は、とてもシンプルにしてあり、詳しくニュートン力学を研究している人からみればおかしいと感じるかもしれません。完璧に理論をカバーしようとするなら、より複雑なシミュレーションが必要になってしまいます。しかし、ここで紹介していることは、みなさんにとってちょうどよい程度に仕上がっていると思います。


1.シーンの設定
400×300で新規ドキュメントを作成してください。ステージの中央に半径16で円を描きます。ステージの様子はこのようになっていますか?

500_501_017_1.jpg


2.ボールにアクションを与えていく前に、いくつかの変数を設定しましょう。物理のシミュレーションをおこなうには、我々の世界にある特性を変数として設定する必要があります。例えば、重力、(弾性物の)戻り、摩擦などです。次のコードを_rootタイムラインの最初のフレームに記述してください。

3.では、ボールに対して作業していきましょう。まず、先程描いた円を、ムビークリップシンボルに変換します。名前をBall_MCとして、基準点を中心にしてください。始めるにあたって・・、次のコードをムービークリップインスタンスに記述してください。

これらの変数は、それ自身の説明のようなものです。velはボールの水平、垂直方向の速度を格納するオブジェクトで、posはボールの位置を得るためのオブジェクトです。

4.物理をやる前に、アクションスクリプトについて少し勉強しましょう。オブジェクトxとyの値が変化することで、ボールがどこに動くべきかが計算されます。最後の2行で、実際の位置を新しく計算された位置が等しくなるように更新されます。

このテクニックは、かなり汎用性が高いものです。下のコードにいよって各フレームでボールの動きを扱い、onClipEvent(load)の記述後に付け加えてください。

重力に関するコードの記述はこれで全部です。でも、まだやることはありますよね?

5.バウンド、バウンド・・
後、やるべきことはボールをどこかで止めなければいけません、必要なモノ・・それは床です!

単純に、ステージの下端を床としましょう。これは、シンプルな重体験型アプリケーションなので、より入念な作りこみは必要ないと思います。ボールの現在地を更新する前に、ボールが床から離れるのかどうか、という判断をする記述を加えます。

そのコードを考える前に、実際に、モノの表面に物体がぶつかればどうなるかを考えて見ましょう。ボールが床にぶつかって、跳ね返ってきても、もとの高さには帰ってこないことはすぐにわかります。その理屈を言えば、例えば床に衝突すれば、ボールはいくらかエネルギーを失い、そのモノが持っている速度も低下します。これがニュートンの弾性公式にあたります。簡単にその公式を紹介すると・・

500_501_017_2.jpg

弾性係数はその物体の材質により、常に0から1の間の値をとります。0ならば、全く跳ね返りません。1ならば永遠にバウンドし続けます。

次のコードを実際のボールの座標が更新される前に加えます。

これは、ボールの下端がステージの下端に達したかどうかをチェックするためのものです。ボールが下端に達したときにy座標を床とそろえ、それより下にいかないようにします。また、跳ねる時の逆向きの速度についても、弾性係数からかえします。

これら全てのコードを記述したならば、ボールは床に当たって、跳ね返ってくるはずです。完成です!・・といいたいところですが、ボールは1回落ちて、数秒後にはムービーは終了してしまいます、これでは少し退屈なので、もう少し改良しましょう。

6.ボールを持ち上げて、好きなところから投げれたら楽しいと思いません?もし、そう思っていたならラッキーです、これからそれをやっていきましょう。

まず、Ball_MCを少し変更していく必要があります。ステージ上でシンボルインスタンスを選択し、Ctrl+Eを押してインスタンスを編集します。黄色いボールを選択して、ボタンシンボルに変更します。名前はBall_Buttonにしてください。新しく作成した、ボタンインスタンスに対して、次のアクションを記述してください。

ボールを投げる

このコードによって、ボールをドラッグしてステージ上で動かすことができるようになります。ここで問題があります、ボールが落下しているときにドラッグされてしまっては、おかしなことになってしまいますよね?解決法としては、変数(dragging)を使って、ドラッグできるときは重力が働かず、そうでないときは重力が働くというようにすればよいのです。

そのためには、Ball_MCインスタンス内のコードを幾つか変更点しなければいけません。OnClipEvent(enterFrame)内の全ての記述に対して、変数draggingを作用させます。次のように記述してください。

もう少しで完成です。ここまででは、我々が望むような投げるという、アクションは与えることができません。ただ、ボールを持ち上げることができるようになるだけです。本当にボールを投げれるようにするには、if(dragging!) の記述をさらに拡張する必要があります。このコードによって、マウスを動かすスピードに対して、水平、垂直方向に速度が発生します。

7.ここからどうしますか?
ボールを投げたら、幾つかの問題があることがわかります。

まず、ステージ上で、右か左に投げれば、ボールは二度と戻ってきません。次に、バウンドが止まろうとしているにもかかわらず、全く止まらないでしょう。

1つめの問題にとりかかりましょう。2つの記述を付け加えます。1つは、ボールがステージの下端から離れているかどうかチェックするためにやったことを、ステージのサイドに関してもおこないます。

次に2つめの問題です。これは1行のコードによって解決できます。床との摩擦を考慮することで止まるはずです。次の最後の1行をif(pos.y + radius > movie.heght)にコードを加えてください。

8.結論
少しだけコードに付け加えていくことで、この重力体験型シミュレーションは完成したはずです!最後に、このチュートリアルは本当に基礎的な物理を紹介したものです。本当の物理をやりたいのなら、もっと拡張したシミュレーションを試してみてください!

ダウンロードファイル


引用:Web Design Library著者:Craig Smith翻訳:atuk



スポンサードリンク

コメント

ランダム記事5件

2016年5月の人気記事ランキング