Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package be.devine.ogp.view
- {
- import Box2D.Collision.Shapes.b2CircleShape;
- import Box2D.Collision.Shapes.b2PolygonShape;
- import Box2D.Collision.b2AABB;
- import Box2D.Common.Math.b2Vec2;
- import Box2D.Dynamics.Joints.b2Joint;
- import Box2D.Dynamics.Joints.b2PrismaticJoint;
- import Box2D.Dynamics.Joints.b2PrismaticJointDef;
- import Box2D.Dynamics.b2Body;
- import Box2D.Dynamics.b2BodyDef;
- import Box2D.Dynamics.b2DebugDraw;
- import Box2D.Dynamics.b2FixtureDef;
- import Box2D.Dynamics.b2World;
- import flash.display.Sprite;
- import flash.events.Event;
- public class GameView extends Sprite
- {
- private var _pixelsToMeter:uint = 30;
- private var _groundHeight:uint = 60;
- private var _world:b2World;
- private var _gravity:b2Vec2;
- private var _doSleep:Boolean = true;
- private var _step:Number = 1/30;
- private var _velocityIterations:uint = 4;
- private var _positionIterations:uint = 4;
- private var groundBody:b2Body
- public function GameView()
- {
- this.addEventListener(Event.ADDED_TO_STAGE,addedToStageHandler);
- }
- private function addedToStageHandler(event:Event):void
- {
- _gravity = new b2Vec2(0.0,10.0);
- _world = new b2World(_gravity,_doSleep);
- createGround();
- createObject();
- createDebugDraw();
- this.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
- }
- private var box:b2Body;
- private var the_prism_joint:b2PrismaticJointDef = new b2PrismaticJointDef()
- private var prismaticJointDef:b2PrismaticJointDef;
- private function createObject():void
- {
- makeDynBox();
- var worldAxis:b2Vec2 = new b2Vec2(1.0, 0.0);
- prismaticJointDef = new b2PrismaticJointDef();
- prismaticJointDef.Initialize(body, groundBody, body.GetWorldCenter(), worldAxis);
- prismaticJointDef.lowerTranslation = -2.5;
- prismaticJointDef.upperTranslation = 2.5;
- prismaticJointDef.enableLimit = true;
- prismaticJointDef.maxMotorForce = 10.0;
- prismaticJointDef.motorSpeed = -1.0;
- prismaticJointDef.enableMotor = true;
- _world.CreateJoint(prismaticJointDef);
- }
- private var body:b2Body;
- private function makeDynBox():void
- {
- var bodyDef:b2BodyDef = new b2BodyDef();
- bodyDef.type = b2Body.b2_dynamicBody;
- bodyDef.position.Set(2,1.3);
- body = _world.CreateBody(bodyDef);
- var dynamicBox:b2PolygonShape = new b2PolygonShape();
- dynamicBox.SetAsBox(1,1);
- var fixtureDef:b2FixtureDef = new b2FixtureDef();
- fixtureDef.shape = dynamicBox;
- fixtureDef.density = 1;
- fixtureDef.friction = 0.3;
- body.CreateFixture(fixtureDef);
- }
- private function createGround():void
- {
- var groundBodyDef:b2BodyDef = new b2BodyDef();
- groundBodyDef.position.Set((stage.stageWidth / 2) / _pixelsToMeter, stage.stageHeight / _pixelsToMeter - 20 / _pixelsToMeter);
- groundBody = _world.CreateBody(groundBodyDef);
- var groundBox:b2PolygonShape = new b2PolygonShape();
- groundBox.SetAsBox((stage.stageWidth / 2) / _pixelsToMeter, 20 / _pixelsToMeter);
- var groundFixtureDef:b2FixtureDef = new b2FixtureDef();
- groundFixtureDef.shape = groundBox;
- groundFixtureDef.density = 1;
- groundFixtureDef.friction = 1;
- groundBody.CreateFixture(groundFixtureDef);
- }
- private function createDebugDraw():void{
- var sprite:Sprite = new Sprite();
- this.addChild(sprite);
- var debugDraw:b2DebugDraw = new b2DebugDraw();
- debugDraw.SetSprite(sprite);
- debugDraw.SetAlpha(0.6);
- debugDraw.SetLineThickness(1);
- debugDraw.SetDrawScale(_pixelsToMeter);
- debugDraw.SetFillAlpha(0.6);
- debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
- _world.SetDebugDraw(debugDraw);
- }
- private function onEnterFrameHandler(event:Event):void
- {
- _world.Step(_step,_velocityIterations,_positionIterations);
- _world.ClearForces();
- _world.DrawDebugData();
- if(!body.IsAwake())
- {
- prismaticJointDef.motorSpeed = 1;
- prismaticJointDef.maxMotorForce = -10;
- body.ApplyTorque(1);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement