Ahora que tenemos configurado nuestro proyecto y esta listo para comenzar, podemos empezar a estudiar Chipmunk. Para eso necesitamos conocer la terminología básica de Chipmunk y saber como esta organizado.
Para
simular un mundo con física necesitamos establecer ciertas reglas como
por ej la gravedad para nuestro nuevo "Universo", también necesitamos
crear un contenedor para todos nuestros objetos, en Chipmunk a esto se
lo denomina espacio (space).
Para definir cualquier objeto es necesario establecer cual es su masa y
otras propiedades del mismo. Esto se hace con lo que Chipmunk llama cuerpo (body).
Un cuerpo no produce colisiones por si mismo porque no tiene "forma" (shape) cuando interactua con otros objetos. Algunos objetos no son
homogeneos, a veces se necesitan definir diferentes parametros para
diferentes partes de un objeto (por ej un helado tiene dos partes, una
más blanda que la otra).
Para definir que áreas de un cuerpo interactuan con el resto del mundo y
las diferentes superficies, se necesitan agregar una o mas formas (shapes) a un
body. En Chipmunk hay tres tipos de formas disponibles: circulo,
segmento y polígono. Combinando estos tres tipos de formas se definen
casi todos los tipos de área de interacción imaginables para nuestros cuerpos. Obviamente que las formas agregadas al mismo cuerpo no producen
colisiones entre ellos.
No siempre es mejor completar el cuerpo con formas para que se unan con
los sprites, agregar muchas formas incrementa el número de cálculos que
Chipmunk necesita para cada frame, es mejor simplificar las fomas de
manera que cubran las partes importantes.
Podemos cambiar cosas como la velocidad o la posición del cuerpo
pero no es recomendado. El método principal para hacer esto es, como en
el mundo real, es aplicar fuerzas. Una fuerza es un vector. Para trabajar
con vectores Chipmunk tiene una libreria llamada cpVect que permita
hacer las operaciones más comunes como multiplicar y proyectar 2
vectores.
Chipmunk también soporta Joints que nos permiten conectar 2 cuerpos mediante diferentes puntos.
Hola a todos! Este blog surge a partir de que no encontraba muchos recursos en español para aprender Objective-C. Espero que les sea útil! ;)
martes, 24 de julio de 2012
martes, 12 de junio de 2012
ChipMunk - Librería de física 2D - Videojuegos para Iphone - Introducción (Parte 1)
ChipMunk es una librería para física 2D muy facil, rápida e independiente del engine gráfico que utilizas para tus juegos. En este caso vamos a utilizar Cocos2D.
En este artículo veremos las características básicas de esta librería para que después puedas continuar por tu cuenta.
LLegaremos a hacer la simulación que se muestra en la figura:
Setup:
Antes de comenzar debemos configurar el proyecto para luego enfocarnos en ChipMunk.
Creamos un proyecto de XCode seleccionando el template "View-Based-Application" o "Single View Application" para versiones posteriores de XCode.
Luego debemos importar todos los archivos de ChipMunk necesarios, para eso descargamos el código de ChipMunk desde aquí , al descomprimirlo vamos a encontrarnos con documentos, demos, etc pero lo que vamos a necesitar esta en la carpeta "src" aunque en nuevas versiones de chipmunk los archivos necesarios los encontré en la carpeta "include".
Antes de importar todos los archivos, sugeriría que creen un nuevo grupo en el proyecto al que llamaremos "Other Sources" y luego hacer "Add Existing Files ..." y seleccionar los archivos que se encuentran en la carpeta src. Tenemos que asegurarnos de seleccionar "Copy items into destination group´s folder (if needed)" . El proyecto debería quedar como muestra la imagen siguiente:
En este artículo veremos las características básicas de esta librería para que después puedas continuar por tu cuenta.
LLegaremos a hacer la simulación que se muestra en la figura:
Setup:
Antes de comenzar debemos configurar el proyecto para luego enfocarnos en ChipMunk.
Creamos un proyecto de XCode seleccionando el template "View-Based-Application" o "Single View Application" para versiones posteriores de XCode.
Luego debemos importar todos los archivos de ChipMunk necesarios, para eso descargamos el código de ChipMunk desde aquí , al descomprimirlo vamos a encontrarnos con documentos, demos, etc pero lo que vamos a necesitar esta en la carpeta "src" aunque en nuevas versiones de chipmunk los archivos necesarios los encontré en la carpeta "include".
Antes de importar todos los archivos, sugeriría que creen un nuevo grupo en el proyecto al que llamaremos "Other Sources" y luego hacer "Add Existing Files ..." y seleccionar los archivos que se encuentran en la carpeta src. Tenemos que asegurarnos de seleccionar "Copy items into destination group´s folder (if needed)" . El proyecto debería quedar como muestra la imagen siguiente:
Ahora debemos agregar al proyecto las dos imágenes:
y en el header del View Controller agregar el siguiente código:
UIImageView *floor; // imagen del piso UIImageView *ball; // imagen de la pelotaEn el método viewDidLoad que se encuentra en el archivo de implementación agregamos el siguiente código:
floor = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"floor.png"]]; floor.center = CGPointMake(160, 350); ball = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ball.png"]]; ball.center = CGPointMake(160, 230); [self.view addSubview:floor]; [self.view addSubview:ball];Fuente: http://www.alexandre-gomes.com/articles/chipmunk/
Compartir en twitter y en facebook
Una de las opciones es utilizar el framework ShareKit: http://www.getsharekit.com que además de permitirnos compartir en twitter nos va a permitir hacerlo en otras redes sociales como facebook, google reader, delicious, etc.
Compartir un item consite en dos pasos:
1.Crear un SHKItem con el texto que se quiere postear.
2.Llamar al método shareItem: de la subclase apropiada
Otras opciones para twitter son
- RSOAuthEngine OAuth engine basado en ARC
- MGTwitterEngine
- MPOAuth
Para compartir en facebook podemos utilizar el sdk de ellos que lo podemos descargar desde aquí
https://github.com/facebook/facebook-ios-sdk
Tienen también un buen tutorial:
https://developers.facebook.com/docs/mobile/ios/build/
Compartir un item consite en dos pasos:
1.Crear un SHKItem con el texto que se quiere postear.
2.Llamar al método shareItem: de la subclase apropiada
- (IBAction)tweet:(id)sender { SHKItem *aTweet = [SHKItem text: @"Share this text"]; [SHKTwitter shareItem:aTweet]; } - (IBAction)facebook:(id)sender { SHKItem *post = [SHKItem text: @"Share this text"]; [SHKFacebook shareItem:post]; }
Otras opciones para twitter son
- RSOAuthEngine OAuth engine basado en ARC
- MGTwitterEngine
- MPOAuth
Para compartir en facebook podemos utilizar el sdk de ellos que lo podemos descargar desde aquí
https://github.com/facebook/facebook-ios-sdk
Tienen también un buen tutorial:
https://developers.facebook.com/docs/mobile/ios/build/
lunes, 11 de junio de 2012
UIView
Cada subclase de UIView tiene un método drawRect:. El código para dibujar un view se encuentra en este método. Cada vez que se dibuja una instancia de UIView el sistema prepara un contexto para esa view.
El contexto es de tipo CGContextRef (Core Graphics Context Reference) y es responsable de producir la imagen y de recibir los comandos para poder dibujar. Un contexto gráfico también tiene información del color que se esta utilizando para dibujar, del sistema de coordenadas y del ancho de las lineas que se están dibujando.
drawRect recibe como parámetro una estructura CGRect que es el rectángulo que se va a dibujar. CGRect tiene origen y tamaño que también son estructuras. Origen es un CGPoint que tiene dos miembros x e y. CGSize tiene también dos miembros width y height. La imagen siguiente nos muestra un CGRect.
Hay dos formas de instanciar un UIView una es mediante alloc e initWithFrame y otra es crearlo a través del Interface Builder.
El contexto es de tipo CGContextRef (Core Graphics Context Reference) y es responsable de producir la imagen y de recibir los comandos para poder dibujar. Un contexto gráfico también tiene información del color que se esta utilizando para dibujar, del sistema de coordenadas y del ancho de las lineas que se están dibujando.
drawRect recibe como parámetro una estructura CGRect que es el rectángulo que se va a dibujar. CGRect tiene origen y tamaño que también son estructuras. Origen es un CGPoint que tiene dos miembros x e y. CGSize tiene también dos miembros width y height. La imagen siguiente nos muestra un CGRect.
Hay dos formas de instanciar un UIView una es mediante alloc e initWithFrame y otra es crearlo a través del Interface Builder.
jueves, 12 de abril de 2012
Evitar que métodos que consumen mucho tiempo se ejecuten en el hilo principal
Si tenemos un método que pide y trae algo de la web, por ejemplo una imagen, sabemos que va a tardar mucho tiempo (unos segundos). Lo que conviene es crear una queue (una cola) para que esto corra en un hilo separado y no en el hilo principal que es donde se esta ejecutando la interfaz del usuario (UIKit queue).
Para esto usamos la API GCD (Grand Central Dispatch).
Este es un ejemplo de como hacerlo:
Este es el método sin crear una queue
Este es el método con la queue
Para esto usamos la API GCD (Grand Central Dispatch).
Este es un ejemplo de como hacerlo:
Este es el método sin crear una queue
-(void) viewWillAppear:(BOOL)animated { NSData *imageData = [NSData dataWithContentsOfURL:networkURL]; UIImage *image = [UIImage imageWithData:imageData]; self.imageView.image = image; self.imageView.frame = CGRectMake(0, 0, image.size.width, image.size.heigh); self.scrollView.contentSize = image.size; }
Este es el método con la queue
-(void) viewWillAppear:(BOOL)animated { // Creo la queue dispatch_queue_t downloadQueue = dispatch_queue_create("image downloader", NULL); dispatch_async(downloadQueue, ^{ NSData *imageData = [NSData dataWithContentsOfURL:networkURL]; //Llamadas al UIKit en el queue principal dispatch_async(dispatch_get_main_queue(), ^{ UIImage *image = [UIImage imageWithData:imageData]; self.imageView.image = image; self.imageView.frame = CGRectMake(0, 0, image.size.width, image.size.heigh); self.scrollView.contentSize = image.size; }); }); // Cuando no existan más bloques release dispatch_release(downloadQueue); }
lunes, 26 de marzo de 2012
Cambiar nombre de la aplicación
Para cambiar el nombre de la aplicación hay que seleccionar el proyecto luego hacer doble click en Target y cambiamos el nombre. Luego en la pestaña Build Settings bajo el header Packaging cambiamos el nombre donde dice Product name, vamos al menú Product > Clean y luego Build.
jueves, 8 de marzo de 2012
Método para calcular los días, horas, minutos y segundos que faltan entre la fecha actual y otra futura
- (void) tiempoHasta:(NSString *) hasta { // Fecha actual NSDate *date = [NSDate date]; int secondsNow =(int)[date timeIntervalSince1970]; // Convierto el string hasta NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyyMMdd"]; NSDate *hastaDate = [dateFormat dateFromString:hasta]; int secondsTarget=(int)[hastaDate timeIntervalSince1970]; int differenceSeconds=secondsTarget-secondsNow; int days=(int)((double)differenceSeconds/(3600.0*24.00)); int diffDay=differenceSeconds-(days*3600*24); int hours=(int)((double)diffDay/3600.00); int diffMin=diffDay-(hours*3600); int minutes=(int)(diffMin/60.0); int seconds=diffMin-(minutes*60); }
Suscribirse a:
Entradas (Atom)