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:
Publicar un comentario