jueves, 2 de agosto de 2012

ChipMunk - Librería de física 2D - Videojuegos para Iphone - Inicializando Chipmunk (Parte 3)


 Para comenzar a trabajar con Chipmunk se necesita:

 1) Inicializarlo
 2) Usar un timer para que Chipmunk pueda saber los pasos de la simulación
 3) Crear y Configurar el espacio

Inicializar Chipmunk es la parte más facil, se necesita llamar a cpInitChipmunk(); en alguna parte de la inicialización de tu aplicación. El timer puede ser seteado usando un simple objeto NSTimer o en algunos casos si estas usando algún game engine deberías usar el timer del engine (para asegurar la sincronización). Finalmente crear un espacio es tan simple como llamar a cpSpaceNew();

Para completar estos 3 pasos hay que comenzar agregando el #import correcto para el .h y .m de tu controlador.
#import "chipmunk.h" 
Luego en el .h se necesita agregar una variable para almacenar nuestro espacio y dos métodos, el .h completo debería verse de esta manera:
    
 
    #import "chipmunk.h"  
      
    @interface ChipmunkTutorialViewController : UIViewController {  
      
        UIImageView *floor; // imagen del piso  
      
        UIImageView *ball; //  imagen de la pelota  
      
        cpSpace *space; // Objeto espacio  
      
    }  
      
    - (void)setupChipmunk; 
      
    - (void)tick:(NSTimer *)timer; // Se dispara en cada "frame"  
      
    @end  
Ahora en el archivo de implementacón deberiamos agregar la siguiente llamada en el viewDidLoad
[self setupChipmunk];  
y finalmente la declaración de los dos métodos definidos
      
    - (void)setupChipmunk {  
      
        // Comienza chipmunk       
        cpInitChipmunk();  
      
        // Crea un objeto espacio       
        space = cpSpaceNew();  
      
        // Define el vector de gravedad       
        space->gravity = cpv(0, -100);  
      
        // Crea un timer que dispara en un intervalo constante (desired frame rate)    
        // Notar que si se esta usando demasiada CPU 
        // El timer debe ser disparado antes de que se complete el ultimo frame
        // Hay tecnicas que se pueden usar para evitar esto pero no se realizaran aqui 
      
        [NSTimer scheduledTimerWithTimeInterval:1.0f/60.0f target:self selector:@selector(tick:) userInfo:nil repeats:YES];  
      
    }  
      
    // LLama a cada frame
      
    - (void)tick:(NSTimer *)timer {  
      
        // Le dice a Chipmunk que avance otro "paso" en la simulación    
        cpSpaceStep(space, 1.0f/60.0f);  
      
    } 
Notarán que también definimos la gravedad para nuestro space. La gravedad es algo que comparten globalmente todos los objetos entonces es de sentido común setearlo al principio. Una cosa que quizás no se comprenda rapidamente es que el valor de la gravedad es una fuerza que se aplica verticalmente hacia abajo con una elasticidad de 100 pero los valores se pueden ajustar como quieran.
El código debe compilar y ejecutarse sin ningún problema pero todavía no se vera nada nuevo ya que no hemos definido nuestros cuerpos (bodies).

No hay comentarios: