JavaScriptで物理シミュレーション
Box2DFlashAS3というAS3用の物理シミュレータがあるわけですが、
「同じECMAScriptだし、ASを少し置換すればJSでも動くんじゃね?」
と言う単なる思い付きを実行してみたら、あっさり動きました。
まさかホントに動くなんて、正直自分でもびびった。
まぁ、あっさりとは言っても連休後半からちびちびやってたので2-3日かかってますけど・・・。
http://blog.technohippy.net/box2djs/demo.html (まだFireFox限定)
http://box2d-js.sourceforge.net/
とりあえず、円と、四角と、多角形と、回転ジョイントを試してみました。
ホントに中身を一切理解しないまま置換しただけなので、上のデモで使ってない機能が動くかどうかは謎。というか、たぶんいくつかは動かないと思う。
もう少しきちんと確認したら、ソースを整理してSourceForgeかなにかに上げます。が、とにかく動いたのがうれしいのでとりあえず公開。(もう10倍くらい早く動いたら実用に足るんだけどなぁ・・・)
コード抜粋
当たり前だけど、型を書かないことを除けば使い方はBox2DFlashAS3と同じです。
// Worldを生成 function createWorld() { var worldAABB = new b2AABB(); worldAABB.minVertex.Set(-1000, -1000); worldAABB.maxVertex.Set(1000, 1000); var gravity = new b2Vec2(0, 300); var doSleep = true; return new b2World(worldAABB, gravity, doSleep); } // 円を生成 function createBall(world, x, y) { var ballSd = new b2CircleDef(); ballSd.density = 1.0; ballSd.radius = 10; ballSd.restitution = 0.2; var ballBd = new b2BodyDef(); ballBd.AddShape(ballSd); ballBd.position.Set(x,y); return world.CreateBody(ballBd); } // シミュレーションを1ステップ進める world.Step(timeStep, iteration);