项目需要,弄了下box2d.
柱状刚体:
/**
*
* @param p
* @return
*
*/
private function createAPillarShape(p:Point):b2PolygonShape
{
var px:int = p.x;
var py:int = p.y;
var b2shapeIns:b2PolygonShape = new b2PolygonShape();
var vetors:Vector.<b2Vec2> = Vector.<b2Vec2>(
[new b2Vec2(((px + 0) / PhysicVars.PIXEL_TO_METER),((py + 0) / PhysicVars.PIXEL_TO_METER)),
new b2Vec2(((px + (_config.PILLAR_W1 >> 1)) / PhysicVars.PIXEL_TO_METER), ((py - _config.PILLAR_H2) / PhysicVars.PIXEL_TO_METER)),
new b2Vec2(((px + _config.PILLAR_W1) / PhysicVars.PIXEL_TO_METER), ((py + 0) / PhysicVars.PIXEL_TO_METER)),
new b2Vec2(((px + _config.PILLAR_W1) / PhysicVars.PIXEL_TO_METER), ((py + _config.PILLAR_H1) / PhysicVars.PIXEL_TO_METER)),
new b2Vec2(((px + 0) / PhysicVars.PIXEL_TO_METER), ((py + _config.PILLAR_H1) / PhysicVars.PIXEL_TO_METER))]);
b2shapeIns.SetAsVector(vetors, vetors.length);
return b2shapeIns;
}
/**
*create bottom shape
* @param p
* @return
*
*/
private function createBottomShape(p:Point):b2PolygonShape
{
var px:int = p.x;
var py:int = p.y;
var b2polygonShapeIns:b2PolygonShape = new b2PolygonShape();
var _local5:Vector.<b2Vec2> = Vector.<b2Vec2>([
new b2Vec2(((px + 0) / PhysicVars.PIXEL_TO_METER), ((py + 0) / PhysicVars.PIXEL_TO_METER)),
new b2Vec2(((px + _config.BOTTOM_W) / PhysicVars.PIXEL_TO_METER), ((py + 0) / PhysicVars.PIXEL_TO_METER)),
new b2Vec2(((px + _config.BOTTOM_W) / PhysicVars.PIXEL_TO_METER), ((py + _config.BOTTOM_H) / PhysicVars.PIXEL_TO_METER)),
new b2Vec2(((px + 0) / PhysicVars.PIXEL_TO_METER), ((py + _config.BOTTOM_H) / PhysicVars.PIXEL_TO_METER))]);
b2polygonShapeIns.SetAsVector(_local5, _local5.length);
return b2polygonShapeIns;
}
/**
*create slots body
* @param startPoint
* @return
*
*/
private function createBody(startPoint:Point):b2Body
{
var b2BodyIns:b2Body;
var b2FixtureIns:b2FixtureDef;
var b2PShapeIns:b2PolygonShape;
var b2PShapeIns2:b2PolygonShape;
var stX:int = startPoint.x;
var stY:int = startPoint.y;
var b2BodyDefIns:b2BodyDef = new b2BodyDef();
b2BodyDefIns.position.Set((stX / PhysicVars.PIXEL_TO_METER), (stY / PhysicVars.PIXEL_TO_METER));
b2BodyDefIns.type = b2Body.b2_staticBody;
b2BodyIns = WorldManager.instance.world.CreateBody(b2BodyDefIns);
var slotFixtureConfig:Object = PhysicVars.instance.slotFixture;
var i:int;
while (i < _config.NUM_PILLARS)
{
b2PShapeIns = createAPillarShape(new Point(((_config.PILLAR_SPACE + _config.PILLAR_W1) * i), 0));
b2FixtureIns = new b2FixtureDef();
b2FixtureIns.shape = b2PShapeIns;
b2FixtureIns.density = slotFixtureConfig.density;
b2FixtureIns.friction = slotFixtureConfig.friction;
b2FixtureIns.restitution = slotFixtureConfig.restitution;
b2BodyIns.CreateFixture(b2FixtureIns);
i++;
}
b2PShapeIns2 = createBottomShape(new Point(0, _config.BOTTOM_SHIFT_Y));
b2FixtureIns = new b2FixtureDef();
b2FixtureIns.shape = b2PShapeIns2;
b2FixtureIns.density = slotFixtureConfig.density;
b2FixtureIns.friction = slotFixtureConfig.friction;
b2FixtureIns.restitution = slotFixtureConfig.restitution;
b2BodyIns.CreateFixture(b2FixtureIns);
return b2BodyIns;
}