Construye un juego de aviones con Sprite Kit [Parte 2/2]

La idea detrás de este tutorial es aprender los conceptos básicos de SpriteKit usando Swift, a través de la creación de un juego sencillo de aviones basado en los clásicos 1942 o Deimos Rising de Ambrosia Software.

Si haz llegado aquí por primera vez, esta es la segunda parte que iniciamos aquí: Construye un juego de aviones con Sprite Kit, donde le dimos movimiento a nuestro avión y algo de realismo con el humo.

Más realismo al vuelo

Con el animo de generar más realismo la sensación de realmente estar volando, vamos a crear objetos en el terreno que vayamos pasando a medida que pasa el tiempo.

Para esto crearemos un atlas de texturas. Adicionemos a nuestro proyecto el folder llamado “terreno.atlas”

add_atlas
Continue reading

Tagged , , , , , ,

Documentando en Xcode

Desde Xcode 5 y iOS 7, se tiene la posibilidad de utilizar una utilidad llamada: HeaderDoc. La que permite a través de la línea de comandos crear la documentación HTML del código siempre y cuando mantengamos una estructura.

De igual forma Xcode nos permite ver dicha información en los “quick look” panels:

Quick Look

Markup Básico

La documentación de los comentarios se distingue por el uso de /** … */ para líneas de comentarios multiples o /// para una única línea de comentario.

Dentro de los bloques se puede utilizar Markdown. (Para una guía completa de Markdown consultar: Markdown syntax)
Continue reading

Tagged , , ,

Funciones

La sintaxis de las funciones en Swift puede ser un poco extraño para los desarrolladores Objective-C sin embargo, rápidamente se convierte en algo natural y muy útil.

Funciones simples

Crear una función simple en Swift es muy sencillo:

func helloWorld(){
    print("Hello World!")
}

Cuando la llamemos:

helloWorld()

El resultado será: “Hello World!\n” impreso en la consola.

Funciones con parámetro

Definimos la variable de entrada y el tipo:

func helloWorld(nameUser:String){
    print("Hello World! \(nameUser)")
}

Para llamarla tendremos:

helloWorld("Jose")

El resultado será: “Hello World! Jose\n” impreso en la consola.

Funciones con valor de retorno

Al incluir la “flecha” de retorno “->”, especificaremos que la función retorna un objeto y el tipo del mismo, así:

func getCurrentTime() -> String { 
    let date = NSDate()
    let formatter = NSDateFormatter()
    formatter.timeStyle = .ShortStyle
    let stringValue = formatter.stringFromDate(date)
    
    return stringValue   
}

Para llamarla tendremos:

let time = getCurrentTime()
print("Son las: \(time)")

El resultado será: “Son las: 11:57 AM\n” impreso en la consola.

Funciones con multiples valores de retorno

Al incluir la “flecha” de retorno “->”, especificaremos que la función retorna un tupla con los tipos que queremos. Una dupla es una lista separada por comas con uno o más tipos, así:

func getCurrentDateAndTime() -> (date: String, time: String) {
    
    let date = NSDate() //Get current date
    
    //Formatter for time
    let formatterTime = NSDateFormatter()
    formatterTime.timeStyle = .ShortStyle //Set style of time
    let timeString = formatterTime.stringFromDate(date) //Convert to String
    
    //Formatter for date
    let formatterDate = NSDateFormatter()
    formatterDate.dateStyle = .ShortStyle //Set style of date
    let dateString = formatterDate.stringFromDate(date) //Convert to String
    
    return (dateString, timeString) //Returns a Tuple type  
}

Para llamarla tendremos:

let time = getCurrentDateAndTime()
print("Son las: \(time.time) del \(time.date)")

El resultado será: “Son las: 12:12 PM del 1/14/16\n” impreso en la consola.

Tagged ,

Construye un juego de aviones con Sprite Kit [Parte 1/2]

Este tutorial pretende enseñar algunos conceptos clave de SpriteKit bajo Swift como lo son: animaciones, colisiones, emisores, entre otros. Para esto diseñaremos un juego de aviones sencillo. Los artes del juego fueron creados por Victor Alvarez. El juego en sí esta basado en los clásicos arcades como 1942 o el juego Deimos Rising de Ambrosia Software.

Los recursos necesarios para el desarrollo del proyecto están aquí: recursos

Iniciando

Inicie Xcode y seleccione File\New\Project… del menú principal. Seleccione la plantilla: iOS\Application\Game y haga clic Next

Template Game

Ingrese el nombre de su preferencia, seleccione Swift para el lenguaje, SpriteKit para la tecnología y Universal para los dispositivos.
Continue reading

Tagged , , , ,

Números Aleatorios

Generar un número aleatorio es el reto clásico en programación, con una solución sencilla a través de la función en C: arc2random.

Sin embargo:

let caraDado = 6
let randomCara = Int(arc4random()) % caraDado + 1
print(randomCara)

Es un arma de doble filo, ya que en arquitecturas de 32-bit como el iPhone 5 o anteriores, podrá fallar ya que allí los Ints son números de 32-bit con signo, así nuestra función a veces devuelve números negativos. En 64-bit funciona sin problemas, por lo cual es mejor hacer el cambio a arc4random_uniform la cual normaliza el resultado entre 0 y n-1.

let caraDado: UInt32  = 6
let randomCara = Int(arc4random_uniform(caraDado)) + 1
print(randomCara)

Así que podremos crear un método para generar números dentro de un rango de la siguiente manera:

func randomInRange(range: Range<Int>) -> Int {
    let count = UInt32(range.endIndex - range.startIndex)
    return  Int(arc4random_uniform(count)) + range.startIndex
}
Tagged , ,

Manejo de Arreglos

Creando Arreglos

Crear y modificar arreglos en Swift es realmente sencillo. Cuando se crea un arreglo, no hay que inicializarlo con tipo si todos los valores iniciales son del mismo tipo. De esta forma si todos los valores iniciales son String, Swift infiere que será un arreglo de String.

Creando un arreglo mutable
(mutable array)

Tenga en cuenta que se inicia con var, es decir, se hace variable, lo que nos permite modificar el contenido del arreglo en el futuro.

var animales = ["Perro", "Gato", "Jirafa", "Elefante"]

Creando un arreglo inmutable
(inmutable array)

Tenga en cuenta que se inicia con let, es decir, se hace constante, lo que no nos permite modificar el contenido del arreglo en el futuro.

let mascotasPermitidas = ["Perro", "Gato", "Canario"]

Continue reading

Tagged ,