#include <SFML\Graphics.hpp>
#include <Box2D\Box2D.h>
#define RAD 0.0174532925199432957f
int main()
{
//Creo mi ventana
sf::RenderWindow window(sf::VideoMode(800, 600), "Kinematic Body");
window.setFramerateLimit( 60 );
//para empezar la simulacion del mundo con esto simula la fisica
float32 timeStep = 1.0f / 60.f;
int32 velocityIterations = 8;
int32 positionIterations = 3;
//defino mi vector de gravedad
b2Vec2 gravity( 0.f , 10.f );
//creo mi mundo
b2World world( gravity );
//definimos un bodydef para dynamicbody
b2BodyDef bodyDefDynamic;
bodyDefDynamic.type = b2_dynamicBody;
bodyDefDynamic.position.Set(150.f, 50.f);
bodyDefDynamic.angle = 0;
//definimos un bodydef para staticbody
b2BodyDef bodyDefStatic;
bodyDefStatic.type = b2_staticBody;
bodyDefStatic.position.Set(100.f, 450.f);
bodyDefStatic.angle = 0;
//definimos un bodydef para kinematicbody
b2BodyDef bodyDefKinematic;
bodyDefKinematic.type = b2_kinematicBody;
bodyDefKinematic.position.Set(150.f, 250.f);
bodyDefKinematic.angle = 1;
//creamos los body
b2Body *dynamicBody = world.CreateBody(&bodyDefDynamic);
b2Body *staticBody = world.CreateBody(&bodyDefStatic);
b2Body *kinematicBody = world.CreateBody(&bodyDefKinematic);
//se crea un box shape para dynamicBox
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(1.f, 1.f);
//se crea un box shape para staticBox
b2PolygonShape staticBox;
staticBox.SetAsBox(1.f, 1.f);
//se crea un box shape para kinematicBox
b2PolygonShape kinematicBox;
kinematicBox.SetAsBox(1.f, 1.f);
//Creamos un fixture para darle mas dinamismo
b2FixtureDef fixtureDefDynamic;
fixtureDefDynamic.shape = &dynamicBox;
fixtureDefDynamic.density = 1.f;
b2FixtureDef fixtureDefStatic;
fixtureDefStatic.shape = &staticBox;
fixtureDefStatic.density = 1.f;
b2FixtureDef fixtureDefKinematic;
fixtureDefKinematic.shape = &kinematicBox;
fixtureDefKinematic.density = 1.f;
//Creamos la fixture
dynamicBody->CreateFixture(&fixtureDefDynamic);
staticBody->CreateFixture(&fixtureDefStatic);
kinematicBody->CreateFixture(&fixtureDefKinematic);
kinematicBody->SetLinearVelocity(b2Vec2(0, 10 ));
kinematicBody->SetAngularVelocity(360 * RAD);
//Creo mi textura
sf::Texture textura;
textura.loadFromFile("box1.png");
//creo mi gameloop
while (window.isOpen())
{
//lo inicio en el gameloop.
world.Step(timeStep, velocityIterations, positionIterations);
//limpio la ventana
window.clear(sf::Color::White);
//Creo mi Sprite
sf::Sprite sprite;
sprite.setTexture( textura );
sprite.setOrigin(16.f, 16.f);
sprite.setPosition(dynamicBody->GetPosition().x, dynamicBody->GetPosition().y);
window.draw( sprite );
sf::Sprite sprite1;
sprite1.setTexture(textura);
sprite1.setOrigin(16.f, 16.f);
sprite1.setPosition(staticBody->GetPosition().x, staticBody->GetPosition().y);
window.draw(sprite1);
sf::Sprite sprite2;
sprite2.setTexture(textura);
sprite2.setOrigin(16.f, 16.f);
sprite2.setPosition(kinematicBody->GetPosition().x, kinematicBody->GetPosition().y);
window.draw(sprite2);
//mostrar en pantalla
window.display();
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
}
return 0;
}
Herramientas Para el Desarrollo de Videojuegos y Lenguajes de Programación en Español
miércoles, 25 de marzo de 2015
KinematicBody en Box2D
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario