<!DOCTYPE HTML>
<html>
<head>
<title>pixi.js example 24</title>
<style>
body {
margin: 0;
padding: 0;
background-color: #333;
}
</style>
<script src="../../bin/pixi.dev.js"></script>
<script src="box2d.min.js"></script>
</head>
<body>
<script>
// create box2d world
// setup axis-aligned bounding box
var worldAABB = new b2AABB();
worldAABB.minVertex.Set(-1000, -1000);
worldAABB.maxVertex.Set(1000, 1000);
// define gravity
var gravity = new b2Vec2(0, 300);
// body can sleep
var doSleep = true;
// create world
var world = new b2World(worldAABB, gravity, doSleep);
// frame duration
var timeStep = 1 / 60;
// how many iteration for collisions calculations
var iteration = 1;
// create an new instance of a pixi stage
var stage = new PIXI.Stage(0x004466);
// create a renderer instance
var renderer = new PIXI.CanvasRenderer(400, 300);
// add the renderer view element to the DOM
document.body.appendChild(renderer.view);
// setup debug draw for box2d
/*world.SetDebugDraw({
ctx : renderer.view.getContext('2d'),
width : 400,
height : 300
});*/
requestAnimFrame(animate);
// create sprites
// create a texture from an image path
var bricksTexture = PIXI.Texture.fromImage("bricks.png");
// create a new wall sprites using the texture
var leftWall = new PIXI.Sprite(bricksTexture);
var rightWall = new PIXI.Sprite(bricksTexture);
// center the wall sprites anchor point
leftWall.anchor.x = 0.5;
leftWall.anchor.y = 0.5;
rightWall.anchor.x = 0.5;
rightWall.anchor.y = 0.5;
stage.addChild(leftWall);
stage.addChild(rightWall);
// create a texture from an image path
var grassTexture = PIXI.Texture.fromImage("grass.png");
// create a new ground sprite using the texture
var ground = new PIXI.Sprite(grassTexture);
// center the ground sprite anchor point
ground.anchor.x = 0.5;
ground.anchor.y = 0.5;
stage.addChild(ground);
// create a texture from an image path
var bunnyTexture = PIXI.Texture.fromImage("bunny.png");
// create a new Bunny sprite using the texture
var bunny = new PIXI.Sprite(bunnyTexture);
// center the bunny sprites anchor point
bunny.anchor.x = 0.5;
bunny.anchor.y = 0.5;
stage.addChild(bunny);
// add box2d bodies
addBody(ground, 200, 292, 400, 16);
addBody(leftWall, 5, 150, 10, 300);
addBody(rightWall, 395, 150, 10, 300);
addBody(bunny, 200, 150, 25, 37, 0.5);
function animate() {
requestAnimFrame(animate);
// box2d world step calculation
world.Step(timeStep, iteration);
// debug draw of box2d world
//world.DebugDraw();
draw();
// render the stage
renderer.render(stage);
}
// add body to box2d world
function addBody(sprite, x, y, width, height, density) {
var shapeDef = new b2BoxDef();
shapeDef.extents.Set(width * 0.5, height * 0.5);
var bodyDef = new b2BodyDef();
bodyDef.AddShape(shapeDef);
bodyDef.position.Set(x, y);
if (density) {
shapeDef.density = density;
shapeDef.friction = 0.4;
shapeDef.restitution = 1.2;
bodyDef.rotation = 0.8;
}
body = world.CreateBody(bodyDef);
body.m_userData = sprite;
}
// draw box2d world
function draw() {
var body, sprite;
for (body = world.m_bodyList; body; body = body.m_next) {
sprite = body.GetUserData();
if (sprite) {
sprite.position = body.GetCenterPosition();
sprite.rotation = body.GetRotation();
}
}
}
</script>
</body>
</html>