2008-05-17
■ マリオのジャンプ実装法とVerlet積分

昔、何かの雑誌*1でマリオのジャンプの実装法を見た覚えがあって、あの放物線運動は、
マリオの速度ベクトルを保存しておいて座標を計算するんじゃなくて、
マリオの前回の座標を保存しておいて座標を計算しているんだそうです。
y_temp = Mario.y; Mario.y += (Mario.y - Mario.y_prev) + F; Mario.y_prev = y_temp;
Fはその瞬間の力で、ジャンプの瞬間はF=10にして、空中ではF=-1にします。
するとこんな放物線になります。
[0,10,19, 27, 34, 40, 45, 49, 52, 54, 55, 55, 54, 52, 49, 45, 40, 34, 27, 19, 10, 0]
加減算しか使わないので、非常に高速にできたと。
これがVerlet積分に似ているなと思ったのが今日の本題。
次に、オイラー法を作ったつもりが実はシンプレクティックになっているで有名な Verletを使ってみた。見た目オイラー法なので実装はすっごい楽である。
(中略)
Verletはプログラム楽だわ、エネルギー保存するわ、計算時間半分だわで RK(ルンゲ=クッタ)いいとこ無しという感じである。
Cowboy Programming » Blob Physicsにある話なんですが、
Verletだと座標だけで話が完結するので、壁にめりこんじゃいけないといった制約条件の記述がすごく楽。
普通だと、速度から未来の座標を計算するわけですが、そこで壁にめりこまないように"速度を調整する"のは、面倒なんです。
マリオもジャンプすれば壁に当たるので、このテクニックを使ってたんじゃないかな。
*1:bit誌1997年"アーケードゲームのテクノロジ"だったかな。情報求む
トラックバック - http://d.hatena.ne.jp/Gemma/20080517/1211010942
- Gemmaの日記 - マリオのジャンプ実装法とVerlet積分(実践編)
- uedakoの日記 - マリオ
- 日記名思いつかない - 横スクロールアクションゲームを作る
- ゲームが作れるようになるまでがんばる日記 - マリオのジャンプ
- ネットサービス研究室 - ジャンル別ゲームの作り方とアルゴリズムま...
- 強火で進め - 放物線状に物を投げる方法
- div1に上がりたいkeitanxkeitanの日記 - 2Dアクションゲームの当た...
- Bug Catharsis - Mが如くF#ive 夢、叶えしMono
- 文系男子のプログラミング奮闘記 - [ゲームプログラミング][Scratch]
- 土屋つかさのテクノロジーは今か無しか - 2Dアクションゲームの簡...
リンク元
- 21 http://b.hatena.ne.jp/entry/http://gemmat.s206.xrea.com/matome/matome.cgi
- 9 http://mixi.jp/view_diary.pl?id=810081410&owner_id=9434709
- 9 http://reader.livedoor.com/reader/
- 6 http://www.google.co.jp/search?q=project+euler&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 6 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GZHZ,GZHZ:2007-38,GZHZ:ja&q=linear+type
- 5 http://b.hatena.ne.jp/entry/http://gemmat.s206.xrea.com/matome/matome.cgi
- 5 http://www.google.com/reader/view/
- 4 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=d0f&q=appjet&btnG=検索&lr=lang_ja
- 3 http://blog.blueblack.net/item_275
- 3 http://search.hatena.ne.jp/search?word=project+euler&site=d.hatena.ne.jp
めんどくさいんだよね あんなの実装したくない
RKなんて使って次数上げられた日にはもう…
壁というか境界条件はif文で解決じゃないの??
座標を調整するほうがずっと楽だよ。やってみりゃわかる。
http://jp.link.hobby-site.com
【概要】
amazonの『この商品を買った人はこんな商品も買っています』情報を辿りグラフを表示していくサイト。
力指向アルゴリズムのグラフの可視化は実装が簡単なので、ぜひトライしてみてください。
ところで、JavaScriptでプラネタリウムの話が最近あって、興味深々です。
http://www.lizard-tail.com/isana/lab/starlitnight/technical_demonstration_01.html
連想グラフを星座みたいに表示できたらいいかもと思いつつ、まだ自分は手をつけていません。