El movimiento del Bombero. Código en Swift 4.
Muchos me habéis pedido que empiece a mostrar código y como el público es el que manda ahí vamos.
El bombero, se compone de 4 imágenes. Simplemente las hemos colocado en el sks con los nombres bombero1, bombero2, bombero3, bombero4 y hemos puesto el alpha en 0 a todos los bomberos menos al del centro el «bombero2» y pasamos a gestionarlo por código. Vamos a darle un repaso y veámoslo.
Para empezar hemos creado dos variables en la clase. El nodo del bombero, y otra consistente en un array para tener a todos los bomberos.
var todosLosBomberos: [SKSpriteNode] = [ ]
Luego en el override func didMove(to view: SKView) inicializamos el bombero. Recorremos todos los nodos del sks con nombre bombero y los agregamos al array.
self.bombero = spriteBombero as! SKSpriteNode
self.todosLosBomberos.append(self.bombero)
})
También inicializamos en el override func didMove(to view: SKView) el reconocimiento de los gestos sobre la pantalla del iPhone. Deslizar con el dedo a la izquierda y deslizar con el dedo a la derecha.
swipeLeft.direction = UISwipeGestureRecognizerDirection.left
self.view?.addGestureRecognizer(swipeLeft)
let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGesture))
swipeRight.direction = UISwipeGestureRecognizerDirection.right
self.view?.addGestureRecognizer(swipeRight)
})
Y luego en la clase creamos una función para que los gestos realicen las acciones que deseamos.
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
switch swipeGesture.direction {
print(«Swiped right»)
let bomberoActivo = todosLosBomberos.filter({$0.alpha == 1})
if bomberoActivo.contains(childNode(withName: «bombero2») as! SKSpriteNode) {
todosLosBomberos.forEach { (bombero) in
bombero.alpha = 0
if bombero == childNode(withName: «bombero4»){
bombero.alpha = 1
}
}
}
if bomberoActivo.contains(childNode(withName: «bombero3») as! SKSpriteNode) {
todosLosBomberos.forEach { (bombero) in
bombero.alpha = 0
if bombero == childNode(withName: «bombero4»){
bombero.alpha = 1
}
}
}
if bomberoActivo.contains(childNode(withName: «bombero1») as! SKSpriteNode) {
todosLosBomberos.forEach { (bombero) in
bombero.alpha = 0
if bombero == childNode(withName: «bombero2»){
bombero.alpha = 1
}
}
}
case UISwipeGestureRecognizerDirection.left:
print(«Swiped left»)
let bomberoActivo = todosLosBomberos.filter({$0.alpha == 1})
if bomberoActivo.contains(childNode(withName: «bombero2») as! SKSpriteNode) {
todosLosBomberos.forEach { (bombero) in
bombero.alpha = 0
if bombero == childNode(withName: «bombero1»){
bombero.alpha = 1
}
}
}
if bomberoActivo.contains(childNode(withName: «bombero4») as! SKSpriteNode) {
todosLosBomberos.forEach { (bombero) in
bombero.alpha = 0
if bombero == childNode(withName: «bombero3»){
bombero.alpha = 1
}
}
}
if bomberoActivo.contains(childNode(withName: «bombero3») as! SKSpriteNode) {
todosLosBomberos.forEach { (bombero) in
bombero.alpha = 0
if bombero == childNode(withName: «bombero1»){
bombero.alpha = 1
}
}
}
default:
break
}
}
}
La lógica es simple. Filtramos en el array cual de los bomberos tiene el alpha en 1 y se lo asignamos a la variable de bomberoActivo.
Una vez que tenemos el Bombero activo, preguntamos por su nombre en el sks y le asignamos lo que queremos que haga para cada caso. En el primer caso, cuando arranca el juego, el bombero 2 está activo, es decir, tiene el alpha en 1 y el resto en alpha 0. Si queremos que al hacer swipe to right, es decir que al desplazar el dedo por la pantalla hacia la derecha, el bombero vaya a la derecha. Ponemos todos los bomberos en alpha 0 y luego le decimos que ponga el bombero 4 en alpha 1 y así para todos los casos. Veamos el resultado.
Supongo, que más adelante Marcos optimizará el código para que sea más eficiente, o sacará el bombero a una clase a parte o preverá que si en el futuro tenemos otro edificio con más ventanas es mejor hacerlo de otra manera, no se, pero para eso es el genio. De momento así funciona, si hay cambios también los pondré.
En el siguiente Post veremos el código de la gota de agua. Mientras y para hacer la espera más amena, podéis descargar y jugar cualquiera de mis otros juegos para iPhone. 😉