- 2008-02-04 (Mon) 4:07
- ActionScript3.0 | Library
最近はBox2DFlashAS3と言うのがはやっているようですね。今更いろいろやろうにも出遅れた感が否めないので、ここはあえて違う物理エンジンをいじってみようと思います。
今回触ってみたのは、FOAMという物理エンジンです。
バージョンは0.1.01。まだまだ開発版ということですかね。
ではでは、初めてなので、まずは使い方から。
必要なものは、Foamクラスのインスタンスです。
private var foam:Foam = new Foam(); addChild(foam);
しかも、FoamクラスはSpriteクラスを継承しているため、描画もしてくれます。
なので、addChildしておきます。
foam.addGlobalForceGenerator(new Gravity(new Vector(0, 0.3)));
Gravityクラスが重力になるようです。(まだ調査しきれてません・・・)
これを、先ほどのfoamインスタンスのメソッド、addGlobalForceGeneratorに渡します。
これで、重力発生です。
続いて、オブジェクトを配置します。
FormインスタンスのメソッドaddElementに、ISimulatableインターフェースなインスタンスを渡してやります。
円形や多角形、ベジェ曲線などがISimulatableインターフェースをimplementsしたクラスとして提供されています。
今回は円形と四角を使ったサンプルを作ってみました。
デモはこちら。
ソースは以下。
/**
* FOAM sample1
* @author jinten.net
*/
package {
import flash.display.*;
import org.generalrelativity.foam.dynamics.element.body.*;
import org.generalrelativity.foam.dynamics.enum.Simplification;
import org.generalrelativity.foam.dynamics.force.Gravity;
import org.generalrelativity.foam.Foam;
import org.generalrelativity.foam.math.Vector;
import org.generalrelativity.foam.util.ShapeUtil;
[SWF(width="300", height="300")]
public class FoamSample1 extends Sprite {
private const W:Number = 300;
private const H:Number = 300;
private var foam:Foam;
public function FoamSample1() {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.BOTTOM;
//FOAMインスタンスの生成
foam = new Foam();
addChild(foam);
//オブジェクトのドラッグ有効化
foam.useMouseDragger(true);
foam.addGlobalForceGenerator(new Gravity(new Vector(0, 0.3)));
//circle
foam.addElement(new Circle(100, 100, 30));
foam.addElement(new Circle(200, 100, 30));
var wall_arr:Array;
//ground
wall_arr = ShapeUtil.createRectangle(W, 20);
foam.addElement(new RigidBody(W/2, 0, Simplification.INFINITE_MASS, wall_arr));
foam.addElement(new RigidBody(W/2, H, Simplification.INFINITE_MASS, wall_arr));
//wall
wall_arr = ShapeUtil.createRectangle(20, H);
foam.addElement(new RigidBody(0, H/2, Simplification.INFINITE_MASS, wall_arr));
foam.addElement(new RigidBody(W, H/2, Simplification.INFINITE_MASS, wall_arr));
foam.simulate();
}
}
}
- Newer: [as3][FOAM]初めてのFOAM(2) 多角形の表示
- Older: [AS3]値渡しと参照渡し
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.jinten.net/blog/archives/41/trackback
- Listed below are links to weblogs that reference
- [as3][FOAM]初めてのFOAM from Jinten Blog