Home > ActionScript3.0 | Library > [as3][FOAM]初めてのFOAM

[as3][FOAM]初めてのFOAM

最近は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したクラスとして提供されています。
今回は円形と四角を使ったサンプルを作ってみました。

デモはこちら。screenshot

ソースは以下。

/**
* 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();
		}
	}
}

Comments:0

Comment Form
Remember personal info

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

Home > ActionScript3.0 | Library > [as3][FOAM]初めてのFOAM

Search
Google
Feeds
Meta
Advertisement

Return to page top