[haXe] Fisix + haXe = FisaXe? hehe
Ken Rogers
ken at fundamentalflaws.com
Thu Jan 4 09:04:51 CET 2007
I am not sure this is of any interest to the list, but I was messing
around and wanted to see if I could use the new Fisix 2d verlet engine
swc codebase in a haXe application. Sure enough, it worked like a charm!
Here are the basic steps(done on OS X - 10.4.8):
1. Use the free mxmlc compiler (from flex2 sdk) and wrap up the
Fisix.swc like so:
mxmlc -include-libraries /AS3_src/Fisix/Bin/FisixEngine.swc
-file-specs Test.as -output ./FisixLib.swf -benchmark=true
2. Create external class declarations for Fisix.swf using haxe compiler:
haxe --gen-hx-classes /path/to/FisixLib.swf
A directory in hxclasses will be created with the externals. Copy
them to wehrever your classpath is for your haXe work.
3. Next I created a haXe project in Eclipse called FisixHX and wrote a
file FisixHX.hx:
package ;
import com.fileitup.fisixengine.utils.MathEngine;
import com.fileitup.fisixengine.core.EngineObject;
import com.fileitup.fisixengine.materials.MaterialFactory;
import com.fileitup.fisixengine.utils.ArrayUtils;
import com.fileitup.fisixengine.collisions.ReactionModes;
import com.fileitup.fisixengine.primitives.FisixContainer;
import com.fileitup.fisixengine.containers.CircleContainer;
import com.fileitup.fisixengine.materials.Material;
import com.fileitup.fisixengine.core.CollisionObject;
import com.fileitup.fisixengine.core.FisixObject;
import com.fileitup.fisixengine.resources.FractalTerrain;
import com.fileitup.fisixengine.primitives.Constraint;
import com.fileitup.fisixengine.utils.RaycastData;
import com.fileitup.fisixengine.primitives.Surface;
import com.fileitup.fisixengine.resources.SurfaceConveyor;
import com.fileitup.fisixengine.graphics.DisplayAttacher;
import com.fileitup.fisixengine.graphics.ParticleAttacher;
import com.fileitup.fisixengine.primitives.Particle;
import com.fileitup.fisixengine.particles.PolygonParticle;
import com.fileitup.fisixengine.particles.GuideParticle;
import com.fileitup.fisixengine.collisions.DetectionNarrowPhase;
import com.fileitup.fisixengine.utils.Sorter;
import com.fileitup.fisixengine.particles.CircleParticle;
import com.fileitup.fisixengine.particles.WheelParticle;
import com.fileitup.fisixengine.resources.Rope;
import com.fileitup.fisixengine.constraints.SpringConstraint;
import com.fileitup.fisixengine.collisions.DetectionModes;
import com.fileitup.fisixengine.core.FisixEngine;
import com.fileitup.fisixengine.collisions.DetectionBroadPhase;
import com.fileitup.fisixengine.graphics.DisplayAttacher2;
import com.fileitup.fisixengine.graphics.WheelAttacher;
import com.fileitup.fisixengine.graphics.SurfaceAttacher;
import com.fileitup.fisixengine.utils.Line;
import com.fileitup.fisixengine.resources.Projectile;
import com.fileitup.fisixengine.resources.Bullet;
import com.fileitup.fisixengine.graphics.ConstraintAttacher;
import com.fileitup.fisixengine.utils.BoundingBox;
import com.fileitup.fisixengine.core.Vector;
import com.fileitup.fisixengine.surfaces.DynamicSurface;
import com.fileitup.fisixengine.utils.IntersectionData;
import com.fileitup.fisixengine.primitives.Magnet;
import com.fileitup.fisixengine.constraints.StickConstraint;
import com.fileitup.fisixengine.graphics.DisplayAttacher3;
import com.fileitup.fisixengine.utils.Raycaster;
import com.fileitup.fisixengine.resources.CircleParticleConveyor;
import com.fileitup.fisixengine.constraints.AngularConstraint;
import com.fileitup.fisixengine.particles.WheelEdgeParticle;
import com.fileitup.fisixengine.collisions.CollisionData;
import com.fileitup.fisixengine.collisions.CollisionReaction;
import com.fileitup.fisixengine.containers.WheelContainer;
import com.fileitup.fisixengine.utils.RawRaycastData;
import com.fileitup.fisixengine.utils.MouseAttacher;
import flash.display.Sprite;
class FisixHX{
public function new(){
}
public static function main(){
var sp:Sprite = new Sprite();
flash.Lib.current.stage.addChild(sp);
// example1.as from the Fisix examples
var myEngine:FisixEngine = new FisixEngine();
myEngine.setReactionMode(ReactionModes.PHYSICAL);
myEngine.setGravity(0,30);
var surface1:Surface = myEngine.newSurface(new Vector(0,200),new
Vector(500,350),10);
surface1.bounce = 0.9;
surface1.friction = 0.5;
var particle1:WheelParticle = myEngine.newWheelParticle(200,100,50);
particle1.bounce = 0.7;
particle1.friction = 0.5;
myEngine.setRender(true);
myEngine.setRenderGraphics(sp.graphics);
myEngine.startEngine(30);
}
}
and a build.hxml:
-swf-version 9
-cp src
-swf-lib /path/to/your/FisixLib.swf
-swf FisixHX.swf
-main FisixHX.hx
Compiling this (with success) will give you the Example1.as from the
Fisix samples. It was a little painful to make the FisixLib and
External imports. But once that was done it can be repurposed very
easily. I would like to somehow make this all simpler but I am just
moving over to haXe now.
All in all it is just great to see a library like this flourishing in
the haXe environment!
Oh! One cool thing to point out is that the core Example1.as code was
used in pure form, no alterations necessary to make it work.
Regards,
Ken
More information about the Haxe
mailing list