Box2D Forums

It is currently Fri May 24, 2013 4:35 am

All times are UTC - 8 hours [ DST ]




Post new topic Reply to topic  [ 2 posts ] 
Author Message
PostPosted: Sat Sep 10, 2011 10:38 am 
Offline

Joined: Mon Aug 01, 2011 2:31 pm
Posts: 1
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();
}
}
}


Top
 Profile  
 
PostPosted: Wed Sep 28, 2011 8:56 pm 
Offline

Joined: Wed Sep 28, 2011 8:29 pm
Posts: 8
Location: Singapore
could you edit your post and put all your code within a "code display", because as it is its really hard to read. After you do that I'll check it out and give you some insights.......


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 2 posts ] 

All times are UTC - 8 hours [ DST ]


Who is online

Users browsing this forum: Google [Bot] and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group