|
Im making a tile based Box2D game, levels are constructed through XML.
But im having troubles adding my graphics to the box. I have a movieclip exported as main box with the dimensions of 32x32, as this is the correct size but i cannot figure out how to add the graphics to the box.
I am trying to add graphics to:
looseBFd
playerBd
goalBd
Here is my code:
package { import Block; import Ramp; import Levels; import CustomCL; import flash.display.*; import flash.events.*; import flash.events.Event; import flash.events.KeyboardEvent; import Box2D.Dynamics.*; import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.Math.*; public class TileGame extends MovieClip { public var lvlCurrent:int = 1; public var reset:Boolean = false; // Player object private var player:b2Body; private var leftKeyDown:Boolean = false; private var rightKeyDown:Boolean = false; private var upKeyDown:Boolean = false; private var downKeyDown:Boolean = false; private var P_POWER:Number = 2; private var P_DENSITY:Number = 10; private var P_FRICTION:Number = 1; private var P_RESTITUTION:Number = .3; // Bounce
// Define the gravity vector private var gravity:b2Vec2 = new b2Vec2(0.0, 10.0); //Define world values private var STD_FRICTION:Number = 1; private var STD_RESTITUTION:Number = .05; // Bounce // Allow bodies to sleep private var doSleep:Boolean = true; // Construct a world object public var m_world:b2World = new b2World(gravity, doSleep); //Body for all physics bodies except for the player object private var levelB:b2Body; // Sprite containing the physics world private var m_sprite:Sprite = new Sprite(); // Sprite containing the gameShell private var gameShell:Sprite = new Sprite(); // World sprite offset private const WORLD_OFFSET:Number = 16; // Set up a customer listener for special events private var m_listener = new CustomCL(); // Some values to define the physics scale and timing private var m_velocityIterations:int = 10; private var m_positionIterations:int = 10; private var m_timeStep:Number = 1.0/30.0; private var m_physScale:Number = 29; // Debug object - This is what draws the green and pink boxes of our physics objects private var dbgDraw:b2DebugDraw = new b2DebugDraw(); // The level object which will hold all our level data private var L:Levels = new Levels("levels.xml"); public function TileGame() { m_world.SetContactListener(m_listener); stage.addEventListener(KeyboardEvent.KEY_DOWN, key_pressed); stage.addEventListener(KeyboardEvent.KEY_UP, key_released); L.addEventListener("xmlloaded", loadSettings); m_world.SetWarmStarting(true); //Debug settings dbgDraw.SetSprite(m_sprite); dbgDraw.SetDrawScale(30.0); dbgDraw.SetFillAlpha(0.3); dbgDraw.SetLineThickness(1.0); dbgDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit); m_world.SetDebugDraw(dbgDraw); addChild(m_sprite); m_sprite.y = WORLD_OFFSET; m_sprite.x = WORLD_OFFSET;
setupScene(); L.loadLevels(); } private function setupScene() { //Static background elements can be setup here //background1.y = stage.stageHeight; //addChild(background1); } private function loadSettings(e:Event=null):void { //Settings can be loaded from the XML here to over ride presets P_POWER = L.pPower; P_DENSITY = L.pDensity; P_FRICTION = L.pFriction; P_RESTITUTION = L.pRes; STD_FRICTION = L.levFriction; STD_RESTITUTION = L.levRes; createLvl(); } private function createLvl(e:Event=null):void { var lvlArray:Array = L.levels[lvlCurrent-1].data; var dataObj:Object; for(var i:int = 0;i<lvlArray.length;i++) { for(var j:int = 0;j<lvlArray[i].length;j++) { switch (lvlArray[i][j]) { case "1": var block:Block = new Block(levelB, i, j, m_physScale, 1, STD_FRICTION, STD_RESTITUTION, this); m_sprite.addChild(block); break; case "2": var rampa:Ramp = new Ramp(levelB, i, j, m_physScale, 1, STD_FRICTION, STD_RESTITUTION, this); m_sprite.addChild(rampa); break; case "3": var rampb:Ramp = new Ramp(levelB, i, j, m_physScale, 2, STD_FRICTION, STD_RESTITUTION, this); m_sprite.addChild(rampb); break; case "4": //Create Loose block var looseBFd:b2FixtureDef = new b2FixtureDef(); var looseBBd:b2BodyDef = new b2BodyDef(); looseBBd.type = b2Body.b2_dynamicBody; var looseBSd:b2PolygonShape = new b2PolygonShape(); dataObj = new Object(); dataObj.name = "DBLOCK"; dataObj.base = this; looseBFd.userData = dataObj; looseBFd.shape = looseBSd; looseBFd.density = .2; looseBFd.friction = 0.9; looseBFd.restitution = 0.1; looseBSd.SetAsBox(15 / m_physScale, 15 / m_physScale); looseBBd.position.Set(j/ m_physScale*30, i/ m_physScale*30); looseBBd.angle = 0; levelB = m_world.CreateBody(looseBBd); levelB.CreateFixture(looseBFd); break; case "P": //Create Player var playerFd:b2FixtureDef = new b2FixtureDef(); var playerBd:b2BodyDef = new b2BodyDef(); playerBd.type = b2Body.b2_dynamicBody; var playerSd:b2PolygonShape = new b2PolygonShape(); dataObj = new Object(); dataObj.name = "PLAYER"; dataObj.base = this; playerFd.userData = dataObj; playerSd.SetAsBox(10 / m_physScale, 10 / m_physScale); playerFd.shape = playerSd; playerFd.density = P_DENSITY; playerFd.friction = P_FRICTION; playerFd.restitution = P_RESTITUTION; playerBd.position.Set(j/ m_physScale*30, i/ m_physScale*30); playerBd.angle = 0; player = m_world.CreateBody(playerBd); player.CreateFixture(playerFd); break; case "G": var goalBd:b2BodyDef = new b2BodyDef(); goalBd.position.Set(j/ m_physScale*30, i/ m_physScale*30); var goalSd:b2CircleShape=new b2CircleShape(14 / m_physScale); var goalFd:b2FixtureDef = new b2FixtureDef(); dataObj = new Object(); dataObj.name = "GOAL"; dataObj.base = this; goalFd.userData = dataObj; goalFd.shape=goalSd; goalFd.isSensor=true; levelB = m_world.CreateBody(goalBd); levelB.CreateFixture(goalFd); break; case "5": var blocka:Block = new Block(levelB, i, j, m_physScale, 2, STD_FRICTION, STD_RESTITUTION, this); m_sprite.addChild(blocka); break; } } } //Once the level is built, begin running the physics engine. addEventListener(Event.ENTER_FRAME, run); } function key_pressed(event:KeyboardEvent):void { if (event.keyCode == 37) { rightKeyDown = true; } if (event.keyCode == 39) { leftKeyDown = true; } if (event.keyCode == 38) { upKeyDown = true; } if (event.keyCode == 40) { downKeyDown = true; } if (event.keyCode == 82) { reset = true; } } function key_released(event:KeyboardEvent):void { if (event.keyCode == 37) { rightKeyDown = false; } if (event.keyCode == 39) { leftKeyDown = false; } if (event.keyCode == 38) { upKeyDown = false; } if (event.keyCode == 40) { downKeyDown = false; } } private function destroyLvl() { removeEventListener(Event.ENTER_FRAME, run); if(lvlCurrent < L.levels.length+1) { reset = false; var node:b2Body = m_world.GetBodyList(); while (node) { var b:b2Body = node; node = node.GetNext(); m_world.DestroyBody(b); } while (m_sprite.numChildren) { m_sprite.removeChildAt(0); } createLvl(); } else { trace("You win!!!!"); } } private function moveWorld() { var vect:b2Vec2 = player.GetPosition(); //Sprite Y position if(m_sprite.width>stage.stageWidth) { if(vect.x*30 < (m_sprite.width - stage.stageWidth/2) && vect.x*30 > stage.stageWidth/2) { m_sprite.x = -(vect.x*30)+(stage.stageWidth/2); } else if(vect.x*30 >= (m_sprite.width - stage.stageWidth/2)) { m_sprite.x = -(m_sprite.width - stage.stageWidth); } else { m_sprite.x = 0; } m_sprite.x = m_sprite.x+WORLD_OFFSET; } if(m_sprite.height>stage.stageHeight) { if(vect.y*30 < (m_sprite.height - stage.stageHeight/2) && vect.y*30 > stage.stageHeight/2) { m_sprite.y = -(vect.y*30)+(stage.stageHeight/2); } else if(vect.y*30 >= (m_sprite.height - stage.stageHeight/2)) { m_sprite.y = -(m_sprite.height - stage.stageHeight); } else { m_sprite.y = 0; } m_sprite.y = m_sprite.y+WORLD_OFFSET; } } private function movePlayer():void{ //If certain keys are down then move the character if(leftKeyDown){ player.ApplyImpulse(new b2Vec2(P_POWER,0), player.GetPosition()); } if(rightKeyDown){ player.ApplyImpulse(new b2Vec2(-P_POWER,0), player.GetPosition()); } if(upKeyDown){ player.ApplyImpulse(new b2Vec2(0,-P_POWER*2), player.GetPosition()); } if(downKeyDown){ player.ApplyImpulse(new b2Vec2(0,P_POWER), player.GetPosition()); } } private function run(e:Event):void { if(reset) { destroyLvl(); } // Update physics m_world.Step(m_timeStep, m_velocityIterations, m_positionIterations); m_world.ClearForces();
// Render m_world.DrawDebugData(); //Move player movePlayer(); //Move world moveWorld(); } } }
|