Cuando estamos desarrollando un juego lo más importante es la física de él, que tu mundo se asemeje al real en lo mejor posible desde la gravedad de los objetos hasta la reacción de ellos con otros objetos, texturas etc. desarrollar desde cero todo esto conlleva un gran esfuerzo y tiempo, por eso existen herramientas que te ayudan a implementar todo lo anterior de una manera fácil y rápida, en este caso les hablare un poco de BOX2D.
Box2d es un engine para física 2d, está programada en c++ pero existen
diferentes ports, para los diferentes lenguajes como net o java. Muchos juegos
en la actualidad lo usan, el más famoso en estos días seria "Angry
Birds" toda la física involucrada desde que arrojas el pajarito hasta que
pegas con los bloques es obra de Box2d. Algunos frameworks que los soportan son
XNA, CORONA, Cocos2d y LIBGDX.
La implementación de box2d es muy sencilla, en java sería algo así:
World world=new World(new
Vector2(0, -10), true);
Con esa línea creas el mundo, World es una clase propietaria de box2d en la
que obviamente se refiere al mundo en que participaran todos los objetos, el
vector que indica en la declaración se refiere a la gravedad del mundo,
"X" para simular gravedad en horizontal, "Y" la gravedad en
vertical.
Después de crear tu mundo simplemente tienes que agregar tus objetos, existen
varios tipos de objetos: dinámicos, estáticos, bullets, kinematics. De esta
forma se crearía el mas sencillo de todos que sería el estático ósea que no le
afecta la gravedad de tu mundo:
// Se crea el cuerpo, agrando posición y tipo.
BodyDef bd = new BodyDef();
bd.position.set(x, y);
bd.type = BodyType.DynamicBody;
ground1 = world.createBody(bd);
bd.position.set(x, y);
bd.type = BodyType.DynamicBody;
ground1 = world.createBody(bd);
// Se crea la forma que tendrá el cuerpo en este caso un circulo.
CircleShape shape1 = new CircleShape();
shape1.setRadius(1f);
// Se agregan las características del cuerpo, densidad, fricción
etc.
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape1;
fixtureDef.density = 1.0f;
fixtureDef.friction=3f;
fixtureDef.filter.groupIndex=-2;
fixtureDef.filter.categoryBits=0x0002;
ground1.createFixture(fixtureDef);
Es algo largo crear un simple objeto, pero puedes ingeniártelas para crear una clase que te ayude a crear objetos con más rapidez. de esta forma es como se crea el mundo y un objeto por default, si agregas mas objetos y estos son dinámicos interactuaran entre ellos sin que tu tengas que programar nada, ósea que las colisiones y física en general funcionan por si solas dentro del mundo creado. Si quieren ejemplos vivos de como implementar esta gran herramienta que es box2d solo digan y los pondré, saludos.
4 comentarios:
Excelente, me gustaria que pusieras lo de los ejemplos vivos y tambien que me recomendaras de donde aprender libgdx, le he estado dando a los tutoriales que hay en youtube y algunos en unos grupos de google pero me cuesta un poco, y seria genial que me comentaras por donde aprendiste tu
gracias de antemano
Saludos
ejemplos ahi muchos en especial en su code google http://code.google.com/p/libgdx/ , aprendi viendo los ejemplos de esa pagina, viene de todo.tambien venden un libro de libgdx. aver si me da tiempo y les muestro mas ejemplos vivos como comentas usando la nueva funcionalidad de libgdx que permite hacer port a html5 y asi ponerlos directo en el blog con codigo y tambien poder jugarlo.
saludos
Estaba buscando tutoriales para libgdx y encontre tu pagina, muy buena por cierto.
Tambien encontre esta http://box2despanol.blogspot.mx/ son ejemplos de libdx y box2d
Estaba buscando tutoriales para libgdx y encontre tu pagina, muy buena por cierto.
Tambien encontre esta http://box2despanol.blogspot.mx/ son ejemplos de libdx y box2d
Publicar un comentario