pponmm
2014-02-11, 18:58
Tjenare tjenare!
JAG HÅLLER PÅ ATT BLI GALEN! Nu är det såhär att jag har suttit och försökt att få igång Box2D i stort sett sedan jag vaknade idag, men jag klarar verkligen inte av det! :mad:
Först satt jag i ungefär fyra timmar bara för att lyckas bygga ihop biblioteket så att det skulle fungera ihop med allt annat jag hade tänkt att använda.. Sedan kommer det inte upp några fysiska kroppar i programmet när jag kör det..
Jag har börjat om från noll säkert tiohundratusen gånger nu, men ÄNTLIGEN! ÄNTLIGEN har jag lyckats få något att hända.
Jag kan nu skapa fallande fyrkantiga block som kan kollidera med varandra, jag kan även skapa statiska block som även dom kan kollidera (men de gör ju inte så mycket iof).
Nu är i alla fall problemet att mina kroppar beter sig otroligt konstigt, dom flyter in i varandra och börjar snurra runt i luften utan anledning osv. Här kommer ett klipp direkt från programmet:
http://www.youtube.com/watch?v=NY7C86mCzPg&feature=youtu.be
Här kommer hela koden för projektet:
#include <Windows.h>
#include <gl\GL.h>
#include <SDL.h>
#include <Box2D\Box2D.h>
#include <iostream>
using namespace std;
//-- GLOBALS
const int WIDTH = 500;
const int HEIGHT = 500;
const int BPP = 32;
const int FPS = 30;
const int BOX_SIZE = 10.f;
b2World *p_world = NULL;
//-- FUNCTIONS
void init() {
SDL_Init( SDL_INIT_EVERYTHING );
SDL_SetVideoMode( WIDTH, HEIGHT, BPP, SDL_OPENGL );
SDL_WM_SetCaption( "2D Plattformer - ALPHA - v0.0.1", NULL );
glMatrixMode( GL_PROJECTION );
glOrtho( 0.f, WIDTH, HEIGHT, 0.f, -1.f, 1.f );
glMatrixMode( GL_MODELVIEW );
glClearColor( 0.f, 0.f, 0.f, 1.f );
}
void init_world() {
// create world
p_world = new b2World( b2Vec2( 0.f, 9.81f ) );
}
void draw_bodys() {
b2Body *p_itr = p_world->GetBodyList();
while( p_itr )
{
glLoadIdentity();
glColor3f( 1.f, 1.f, 1.f );
glTranslatef( p_itr->GetPosition().x, p_itr->GetPosition().y, 0.f );
glRotatef( p_itr->GetAngle(), 0.f, 0.f, 1.f );
glBegin( GL_QUADS );
glVertex2f( -BOX_SIZE, -BOX_SIZE );
glVertex2f( BOX_SIZE, -BOX_SIZE );
glVertex2f( BOX_SIZE, BOX_SIZE );
glVertex2f( -BOX_SIZE, BOX_SIZE );
glEnd();
p_itr = p_itr->GetNext();
}
}
void create_body( int X, int Y, int W, int H, bool DYNAMIC ) {
b2BodyDef l_bodydef;
l_bodydef.position.Set( X, Y );
l_bodydef.type = b2_staticBody;
if( DYNAMIC )
l_bodydef.type = b2_dynamicBody;
b2Body *l_body = p_world->CreateBody( &l_bodydef );
b2PolygonShape l_shape;
l_shape.SetAsBox( W, H );
b2FixtureDef l_fixture;
l_fixture.shape = &l_shape;
l_fixture.density = 1.f;
l_body->CreateFixture( &l_fixture );
cout << "EVENT: Body created! (" << X << ", " << Y << ", " << W << ", " << H << ")\n";
}
//-- MAIN
int main(int argc, char** argv)
{
// initialization
init();
init_world();
// locals
bool quit = false;
SDL_Event event;
int time = 0;
// game loop
while( !quit )
{
time = SDL_GetTicks();
// input
while( SDL_PollEvent( &event ) )
{
switch( event.type )
{
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
if( event.key.keysym.sym == SDLK_ESCAPE )
{
quit = true;
}
case SDL_MOUSEBUTTONDOWN:
if( event.button.button == SDL_BUTTON_LEFT )
{
create_body( event.button.x, event.button.y, BOX_SIZE, BOX_SIZE, true );
}
else if( event.button.button == SDL_BUTTON_RIGHT )
{
create_body( event.button.x, event.button.y, BOX_SIZE, BOX_SIZE, false );
}
break;
}
}
// updating
glClear( GL_COLOR_BUFFER_BIT );
p_world->Step( 1000.f / FPS, 10, 10 );
draw_bodys();
SDL_GL_SwapBuffers();
// fps controll
if( 1000.f / FPS > SDL_GetTicks() - time )
SDL_Delay( 1000.f / FPS - ( SDL_GetTicks() - time ) );
}
// delete world and all it's content
if( p_world != NULL )
{
delete p_world;
p_world = NULL;
}
return 0;
}
Om det är möjligt att få det här att fungera som det ska så svär jag på att jag skall offra mitt förstfödda barn i Jesus namn!
Jag har för övrigt ingen som helst aning om vad felet kan vara, har försökt med allt jag kan komma på.
mvh!
JAG HÅLLER PÅ ATT BLI GALEN! Nu är det såhär att jag har suttit och försökt att få igång Box2D i stort sett sedan jag vaknade idag, men jag klarar verkligen inte av det! :mad:
Först satt jag i ungefär fyra timmar bara för att lyckas bygga ihop biblioteket så att det skulle fungera ihop med allt annat jag hade tänkt att använda.. Sedan kommer det inte upp några fysiska kroppar i programmet när jag kör det..
Jag har börjat om från noll säkert tiohundratusen gånger nu, men ÄNTLIGEN! ÄNTLIGEN har jag lyckats få något att hända.
Jag kan nu skapa fallande fyrkantiga block som kan kollidera med varandra, jag kan även skapa statiska block som även dom kan kollidera (men de gör ju inte så mycket iof).
Nu är i alla fall problemet att mina kroppar beter sig otroligt konstigt, dom flyter in i varandra och börjar snurra runt i luften utan anledning osv. Här kommer ett klipp direkt från programmet:
http://www.youtube.com/watch?v=NY7C86mCzPg&feature=youtu.be
Här kommer hela koden för projektet:
#include <Windows.h>
#include <gl\GL.h>
#include <SDL.h>
#include <Box2D\Box2D.h>
#include <iostream>
using namespace std;
//-- GLOBALS
const int WIDTH = 500;
const int HEIGHT = 500;
const int BPP = 32;
const int FPS = 30;
const int BOX_SIZE = 10.f;
b2World *p_world = NULL;
//-- FUNCTIONS
void init() {
SDL_Init( SDL_INIT_EVERYTHING );
SDL_SetVideoMode( WIDTH, HEIGHT, BPP, SDL_OPENGL );
SDL_WM_SetCaption( "2D Plattformer - ALPHA - v0.0.1", NULL );
glMatrixMode( GL_PROJECTION );
glOrtho( 0.f, WIDTH, HEIGHT, 0.f, -1.f, 1.f );
glMatrixMode( GL_MODELVIEW );
glClearColor( 0.f, 0.f, 0.f, 1.f );
}
void init_world() {
// create world
p_world = new b2World( b2Vec2( 0.f, 9.81f ) );
}
void draw_bodys() {
b2Body *p_itr = p_world->GetBodyList();
while( p_itr )
{
glLoadIdentity();
glColor3f( 1.f, 1.f, 1.f );
glTranslatef( p_itr->GetPosition().x, p_itr->GetPosition().y, 0.f );
glRotatef( p_itr->GetAngle(), 0.f, 0.f, 1.f );
glBegin( GL_QUADS );
glVertex2f( -BOX_SIZE, -BOX_SIZE );
glVertex2f( BOX_SIZE, -BOX_SIZE );
glVertex2f( BOX_SIZE, BOX_SIZE );
glVertex2f( -BOX_SIZE, BOX_SIZE );
glEnd();
p_itr = p_itr->GetNext();
}
}
void create_body( int X, int Y, int W, int H, bool DYNAMIC ) {
b2BodyDef l_bodydef;
l_bodydef.position.Set( X, Y );
l_bodydef.type = b2_staticBody;
if( DYNAMIC )
l_bodydef.type = b2_dynamicBody;
b2Body *l_body = p_world->CreateBody( &l_bodydef );
b2PolygonShape l_shape;
l_shape.SetAsBox( W, H );
b2FixtureDef l_fixture;
l_fixture.shape = &l_shape;
l_fixture.density = 1.f;
l_body->CreateFixture( &l_fixture );
cout << "EVENT: Body created! (" << X << ", " << Y << ", " << W << ", " << H << ")\n";
}
//-- MAIN
int main(int argc, char** argv)
{
// initialization
init();
init_world();
// locals
bool quit = false;
SDL_Event event;
int time = 0;
// game loop
while( !quit )
{
time = SDL_GetTicks();
// input
while( SDL_PollEvent( &event ) )
{
switch( event.type )
{
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
if( event.key.keysym.sym == SDLK_ESCAPE )
{
quit = true;
}
case SDL_MOUSEBUTTONDOWN:
if( event.button.button == SDL_BUTTON_LEFT )
{
create_body( event.button.x, event.button.y, BOX_SIZE, BOX_SIZE, true );
}
else if( event.button.button == SDL_BUTTON_RIGHT )
{
create_body( event.button.x, event.button.y, BOX_SIZE, BOX_SIZE, false );
}
break;
}
}
// updating
glClear( GL_COLOR_BUFFER_BIT );
p_world->Step( 1000.f / FPS, 10, 10 );
draw_bodys();
SDL_GL_SwapBuffers();
// fps controll
if( 1000.f / FPS > SDL_GetTicks() - time )
SDL_Delay( 1000.f / FPS - ( SDL_GetTicks() - time ) );
}
// delete world and all it's content
if( p_world != NULL )
{
delete p_world;
p_world = NULL;
}
return 0;
}
Om det är möjligt att få det här att fungera som det ska så svär jag på att jag skall offra mitt förstfödda barn i Jesus namn!
Jag har för övrigt ingen som helst aning om vad felet kan vara, har försökt med allt jag kan komma på.
mvh!