Box2DでActionScript物理プログラミング

第1回 Box2Dを使ってみよう

この記事を読むのに必要な時間:およそ 3 分

サンプルの説明

作成したサンプルプログラムの中で動いていた,7つのサンプルをそれぞれ説明します。

Ragdolls

物理エンジンのHello world……と言うにしては少し高度ですが,物理エンジンのサンプルでは必ずと言っていいほど出てくるラグドールです。円や四角といった基本形状,それらをつなぐジョイント,適度な密度,摩擦,反発など,物理エンジンの様々なフィーチャーを使っています。そういう意味では,物理エンジンの永字八法と言った方が似合いそうです。

Compound Shapes

円,三角形,四角形といった基本形状のデモですが,それらが組み合わさったものもあります。大抵の物理エンジンでは,内部の計算を単純にするために,凸包(convex)しか扱うことが出来ません。凸包とは,いわゆる普通の四角形のように,全ての角が膨らんでいる多角形です。しかし,四角形の中には,このサンプルの中央にたくさんある矢じりのような形も含まれます。これは凸包ではありません。こういった形を使うには,三角形などのより簡単な形状を組み合わせて表現しなければなりません。

凸包

凸包

Crank/Gears/Pulley

クランクやギヤなどの,機械的なパーツを表現しているサンプルです。左側のクランクは,今までのサンプルで初登場となる,動力を持った物体です。真ん中には,形は円ですが,ギアのような動きをしている物体があります。片方を回してみると,それにしたがってもう片方が回ります。そしてその右には,これも分かりにくいのですが,プーリーがあります。紐が空中の2点で支えられていますが,ここにプーリーがあると考えてください。

Bridge

これは見たまんまですね。橋というかハンモック的なものに,たくさんの物体を載せています。橋は,細長い四角形をジョイントでつないだものです。橋の真ん中をつまんで上下に揺さぶると面白い動きをします。

Stacked Boxes

これも特に説明は要りませんね。山積みされた四角形に円がぶつかるだけのサンプルです。初期配置がわずかにランダムでずれるので,何度もRを押してリセットしてみると,違う動きをするのが分かるかと思います。

Continuous Collision Detection

しばらくは普通に動いているかと思ったら,突然激しく動き出します。これは,反発係数を大きくしすぎたサンプルです。ボールをある高さから落としたとき,反発係数が0ならまったくバウンドせず,1なら元の高さまで戻ってきます。しかし,このサンプルではそれよりも反発係数が大きいため,どんどんバウンドが増幅されていきます。

Theo Jansen Walker

私は最初このサンプルが何なのか分からなかったのですが,どうやら風力で動く模型を作っているオランダのアーティスト,テオ・ヤンセンの作品をまねて作ったもののようです。風で動くという所まで完全にシミュレーションしているわけではないようですが,なかなか興味深い構造,動きをしています。

以上,7つのサンプルを紹介しました。もちろん全ての動作を理解する必要はありません。Box2Dを使うとこんなことができるのかという程度に捉えてもらえればいいかと思います。

物理エンジンの一般的な話題

その他の物理エンジン

この特集で解説するのはBox2Dですが,他にもFlash向けの物理エンジンがあるので,簡単に紹介します。

APE

ActionScript向けの物理エンジンでかなり昔からあるのがAPEです。こちらはActionscript Physics Engineという名前が示すとおり,最初からActionScriptで書かれている物理エンジンで,JavaやC++に移植されています。Box2Dが登場してからは,やや押されている印象があります。

WOW-Engine

WOW-Engineは,ActionScriptの物理エンジンにしては珍しく,3Dの物理エンジンです。まだまだ実験段階で,色々と不具合もあるようですが,使い方次第で面白いコンテンツを作れるのではないかと思います。

WOW-Engineのサンプル

WOW-Engineのサンプル

描画について

基本的に物理エンジンは描画を担当しません。補助的な描画システムを持っているものもありますが,あくまでも補助的です。なので,Box2Dを使って絵を動かしたければ自分でSpriteやMovieClipを扱う必要がありますし,WOW-Engineのように3Dであれば,Papervision3Dなどの3Dエンジンを組み合わせる必要があります。

幸いBox2Dは上記で述べたような補助的な描画システムを持っています。今回実行したサンプルは,この描画システムによって描画されています。この描画システムはシンプルですが,物理エンジンの挙動をつかむにはぴったりだと思います。

まとめ

Box2Dがどのようなものか,雰囲気をつかんでいただけたでしょうか。あくまで雰囲気でとどめるために,プログラムの詳細には触れませんでしたが,次回からはプログラムを書きながらBox2Dの具体的な使い方について解説していきます。

著者プロフィール

木村秀敬(きむらひでたか)

茨城高専,北陸先端大を卒業後,独立系ベンチャーにあこがれてjig.jpに就職。 ActionScript好きですが,根はコテコテのC/C++プログラマです。Flash/ActionScriptに興味のある方は是非Spark Projectへ。

コメント

コメントの記入