cpSpaceHashEach(cpSpaceHash * hash, cpSpaceHashIterator func, void * data)Esta función toma un hash (un array), una función que será llamada para cada elemento en el array y opcionalmente para un parametro convencional. Entonces agregamos este código después de cpSpaceStep
// Llama a nuestra funcion para cada forma cpSpaceHashEach(space->activeShapes, &updateShape, nil);
Como se explico antes, se llamara a la funcion updateShape (que implementaremos luego) para el array activeShapes. Discutiremos el termino formas (shapes) "activas" en más detalle cuando implementemos el piso, no se preocupen por los detalles ahora. Ahora necesitamos implementar la función updateShape empezando por agregar esto en el .h después de las otras declaraciones de los métodos.
void updateShape(void *ptr, void* unused); // Actualiza la representación visual (sprite)y luego, este código en el archivo de implementación
void updateShape(void *ptr, void* unused) { // Obtenemos la forma cpShape *shape = (cpShape*)ptr; // Asegurate que todo está correcto if(shape == nil || shape->body == nil || shape->data == nil) { NSLog(@"Unexpected shape please debug here..."); return; } // Finalmente chequea si el objeto es un UIView de cualquier tipo // y actualizamos la posición de acuerdo a ello if([shape->data isKindOfClass:[UIView class]]) { [(UIView *)shape->data setCenter:CGPointMake(shape->body->p.x, 480-shape->body->p.y)]; } else NSLog(@"The shape data wasn't updateable using this code."); }Esta última parte del código hace varias cosas, sin embargo solo 1 o 2 lineas de código son requeridas. Agregué algunas advertencias para que vean cuales pueden llegar a ser los problemas, lo importante es donde realizamos el update de nuestra posición. Presten atención al hecho de que que no asigne directamente las coordenadas Y, esto es porque Chipmunk tiene un sistema de coordenadas diferentes al de Cocoa. El origen de las coordenadas en Cocoa esta en la esquina superior izquierda y en Chipmunk el origen esta en la esquina inferior izquierda entonces hay que tener especial cuidado en esto. Cocos2D comparte el mismo sistema de coordenas que Chipmunk.
Ahora que finalmente parece que tenemos todo lo que necesitamos para que se mueva la pelota es hora de que compilemos y corramos el proyecto. Si seguiste correctamente todas las instrucciones deberias ver la pelota cayendo y aumentando su velocidad descendente. Vemos que la pelota pasa a traves del piso, esto es lo que solucionaremos en las siguientes partes del tutorial.
No hay comentarios:
Publicar un comentario