Game Development Reference
In-Depth Information
Now we have a working truck with trailer, but don't forget we aren't here to build
trucks, but siege machines to destroy pigs' hideouts.
Don't let some bodies collide - filtering
collisions
Don't be fooled by the heading: we are going to build the siege machine, it's just that
it does not introduce anything new, and I want you to learn something new at every
step. The main purpose of this section is to learn collision filtering.
1. First things first, let's build the siege machine. The morning star projectile
will be bound to the trailer with a distance joint that we need to be able to
destroy to fire the projectile, so we need it as a class level variable:
private var world:b2World;
private var worldScale:Number=30;
private var left:Boolean=false;
private var right:Boolean=false;
private var frj:b2RevoluteJoint;
private var rrj:b2RevoluteJoint;
private var motorSpeed:Number=0;
private var sling:b2DistanceJoint;
2.
The construction of the siege machine itself over the trailer is not complex,
there's only a lot of code to write when the motor is false , that is when we
aren't working on the truck.
private function addCart(pX:Number,pY:Number,motor:Boolean):b2Body
{
var bodyDef:b2BodyDef=new b2BodyDef();
bodyDef.position.Set(pX/worldScale,pY/worldScale);
bodyDef.type=b2Body.b2_dynamicBody;
var polygonShape:b2PolygonShape=new b2PolygonShape();
polygonShape.SetAsBox(40/worldScale,20/worldScale);
var fixtureDef:b2FixtureDef=new b2FixtureDef();
fixtureDef.shape=polygonShape;
fixtureDef.density=1;
fixtureDef.restitution=0.5;
fixtureDef.friction=0.5;
var body:b2Body=world.CreateBody(bodyDef);
body.CreateFixture(fixtureDef);
if (! motor) {
var armOrigin:b2Vec2=new b2Vec2(0,-60/worldScale);
var armW:Number=5/worldScale
var armH:Number=60/worldScale
 
Search WWH ::




Custom Search