A quick basic physics demo using haxe, pixi.js and nape just to make sure the combination works and well it works :)
Click here for the demo and source code below.
package samples.nape;
import pixi.renderers.IRenderer;
import pixi.display.Sprite;
import pixi.display.Stage;
import pixi.textures.Texture;
import pixi.utils.Detector;
import js.Browser;
import haxe.Timer;
import nape.geom.Vec2;
import nape.phys.Body;
import nape.phys.BodyType;
import nape.shape.Circle;
import nape.shape.Polygon;
import nape.space.Space;
import nape.phys.Material;
class Main {
var _renderer:IRenderer;
var _stage:Stage;
var _floor:Body;
var _space:Space;
var _balls:Array<Sprite>;
var _pballs:Array<Body>;
public function new() {
_stage = new Stage(0x00FFFF);
_renderer = Detector.autoDetectRenderer(800, 600);
Browser.document.body.appendChild(_renderer.view);
_balls = [];
_pballs = [];
_setUpPhysics();
var timer:Timer = new Timer(1000);
timer.run = _addBall;
Browser.window.requestAnimationFrame(cast animate);
}
function _setUpPhysics() {
var gravity = Vec2.weak(0, 600);
_space = new Space(gravity);
_floor = new Body(BodyType.STATIC);
_floor.setShapeMaterials(Material.wood());
_floor.shapes.add(new Polygon(Polygon.rect(0, 595, 800, 1)));
_floor.space = _space;
}
function _addBall() {
var ball:Sprite = new Sprite(Texture.fromImage("assets/nape/ball.png"));
ball.anchor.set(0.5, 0.5);
_balls.push(ball);
_stage.addChild(ball);
var pball:Body = new Body(BodyType.DYNAMIC);
pball.shapes.add(new Circle(10));
pball.position.setxy(Std.random(800), 0);
pball.angularVel = 0;
pball.allowRotation = true;
pball.setShapeMaterials(Material.rubber());
pball.space = _space;
_pballs.push(pball);
}
function animate() {
Browser.window.requestAnimationFrame(cast animate);
_space.step(1 / 60);
for(i in 0 ... _pballs.length) {
_balls[i].position.x = _pballs[i].position.x;
_balls[i].position.y = _pballs[i].position.y;
_balls[i].rotation = _pballs[i].rotation;
}
_renderer.render(_stage);
}
static function main() {
new Main();
}
}