jueves, 9 de agosto de 2012

ChipMunk - Librería de física 2D - Videojuegos para Iphone - Definiendo el cuerpo y la forma (Parte 4)

Definir el cuerpo es un proceso simple aunque requiere un poco de conocimiento de física. Chipmunk dispone de una función  cpBodyNew(masa, momento); que maneja todas las condiciones iniciales que  requiere un cuerpo. En general todo esto es para la 
posición del cuerpo.

Entonces el siguiente código definirá el cuerpo de nuestra pelota, establecerá la posición y la agregará a nuestro espacio. El siguiente código irá al final del método setupChipmunk.
  

    // Crea el cuerpo de la pelota con 100 de masa  
    // y el momento es infinito 
      
    cpBody *ballBody = cpBodyNew(100.0, INFINITY);  
      
    // Setear la posición inicial   
      
    ballBody->p = cpv(160, 250);  
      
    // Agregar el cuerpo al espacio  
      
    cpSpaceAddBody(space, ballBody);  

Luego debemos especificar como la pelota interactua con otros objetos definiendo su forma(shape) y asociandole propiedades.

Este proceso es actualmente el más complejo de todos y a veces requiere que se modifiquen algunas cosas mediante prueba y error. Chipmunk consta de 3 funciones para crear formas basadas en el tipo de forma que se desee.

- cpCircleShapeNew(cpBody * body, cpFloat radius, cpVect offset)
- cpSegmentShapeNew(cpBody * body, cpVect a, cpVect b, cpFloat radius)
- cpPolyShapeNew(cpBody * body, int numVerts, cpVect * verts, cpVect offset)

El significado de los argumentos en esas funciones es el siguientes:
body: el cuerpo asociada con la forma que estan creando
radius: el radio del circulo que estas creando o el ancho de la linea/segmento
offset: donde posicionar la forma relativa al centro del cuerpo
a, b : los puntos comienzo/final para el segmento (crea una linea entre dos puntos) numVerts, verts: para los poligonos se provee un array de los vertices que que definen la forma (debido a restricciones que tiene C se necesita pasar numVerts que es el numero de items/puntos en un array). Entonces ahora que tenemos un vistazo de como crear formas todo lo que falta es saber como definir sus propiedades, las explicaciones se encuentran en los comentarios del siguiente código.
  
    // Crear la forma asociada con el cuerpo de la pelota  
      
    cpShape *ballShape = cpCircleShapeNew(ballBody, 20.0, cpvzero);  
      
    ballShape->e = 0.5; // Elasticity  
      
    ballShape->u = 0.8; // Friction  
      
    ballShape->data = ball; // Associate with out ball's UIImageView  
      
    ballShape->collision_type = 1; // Collisions are grouped by types  
      
    // Agregar la forma al espacio  
      
    cpSpaceAddShape(space, ballShape);  
Se pueden definir más propiedades, se puede chequear la documentación si se quiere saber más sobre ellas, por ahora lo que necesitamos que esta configurado los datos y el collision_type. Se puede eliminar la elasticidad y la fricción e incluso cambiar sus valores.

No hay comentarios: