Viking Platform II – Eric & the Onyx Heart. El desarrollo.

He empezado el desarrollo de Viking Platform II. La principales diferencias serán una mejora sustancial de la calidad de los gráficos y animaciones, la inclusión del control por gestos y una historia mucho más inmersiva, sin olvidarnos de su esencia original que inspiró el desarrollo de la primera parte basada en Rick Dangerous. Va a ser un proyecto largo, espero que esté disponible entre Septiembre y Diciembre de 2019. Me pillará en medio de iOS 13, espero que no me complique mucho el desarrollo, pero como os prometí contaros el paso a paso, vamos a ello.

Viking Platform II – Eric & the Onyx Heart. El desarrollo.

UIGestureRecognizer

Lo primero fue pensar en crear el GDD, pero al final, como trabajo solo y tengo muy claras las cosas, como siempre, me he puesto a trabajar sin más.

Lo primero que he hecho es armar un escenario de pruebas, el de la foto que encabeza este post, para empezar las pruebas de los controles por gestos. La teoría, con el pulgar de la mano izquierda controlar el movimiento y con el pulgar de la mano derecha las acciones.

Mano izquierda – Movimiento:

  1. Desplazar a Eric a la derecha
  2. Desplazar a Eric a la Izquierda
  3. Subir
  4. Bajar

Mano derecha – Acciones:

  1. Saltar
  2. Agacharse/Caer con fuerza
  3. Lanzar Martillo
  4. Defenderse
  5. Soltar Bomba.

Swift, me propone las librería UIGestureRecognizer para implementar los gestos. Estuve haciendo múltiples pruebas y estuve a punto de olvidarme de los gestos y meter 2 joysticks, pero al final conseguí resolverlo.

El principal problema era que no conseguía que los gestos de una mano no influyeran en los gestos de la otra. Probé “UIPanGetsure” para una mano y los “UISwipeGetsure” para la otra. “UIPanGesture” para las dos manos, “UISwipeGesture” también para las dos manos y el problema era siempre el mismo, el gestureRecognize.state no diferenciaba para las dos manos.

La documentación de apple me indicaba que podía utilizar dos gestos simultáneamente cargando en la clase el correspondiente delegado “UIGestureRecognizerDelegate” e iniciándolo e igualando a “self”. También hacía hincapié en permitir explícitamente ambos gestos mediante la función  que lo fuerza mediante “shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer”, pero no funcionaba.

Al no conseguirlo, antes de abandonar la idea y meterle 2 joysticks camuflados, incluso probé el “TouchesMoved” con la mano izquierda y “UISwipeGetsure” para la mano derecha, pero este último también daba problemas con el “TouchesCanceled”, son incompatibles.

Al final desistí y empecé la clase para los joysticks y cuando estaba creando los ángulos de la palanca, se me ocurrió una simple idea. ¿Y si creo una nueva vista falsa sobre la vista principal y asigno uno de los gestos a esa vista?.

Volià, funcionó, os pongo la solución para los que quieran probar el código. Es Swift, en SpriteKit y en Xcode.

Cambiad en el código “&gt;” por “>” y ” &lt;” por “<

Recuerda, es importante traerse el delegado UIGestureRecognizerDelegate

1
2
class Game: SKScene, SKPhysicsContactDelegate, UIGestureRecognizerDelegate {
var viewDerecha = UIImageView()

Ajustamos la vista a la parte derecha de la pantalla, la activamos al usuario y la añadimos como subview a la view.

1
2
3
4
override func didMove(to view: SKView) {
viewDerecha = UIImageView(frame: CGRect(origin: CGPoint(x: (self.view?.frame.width)! / 2, y: 0), size: CGSize(width: (self.view?.frame.width)! / 2, height: (self.view?.frame.width)!)))
viewDerecha.isUserInteractionEnabled = true
view.addSubview(viewDerecha)

Inicializamos los gestos, recuerda inicializar el delegado. Fíjate que añadimos un gesto a la view y otro, a la creada anteriormente viewDerecha.

1
2
3
4
5
6
7
8
let panLeftGesture = UIPanGestureRecognizer(target: self, action: #selector(self.respondToLeftPanGesture))
panLeftGesture.delegate = self
self.view?.addGestureRecognizer(panLeftGesture)
<code lang="swift">
let panRightGesture = UIPanGestureRecognizer(target: self, action: #selector(self.respondToRightPanGesture))
panRightGesture.delegate = self
viewDerecha.addGestureRecognizer(panRightGesture)
}

Habilitamos y forzamos la opción de tener diferentes gestos de forma simultánea.

1
2
3
4
5
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer,
shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer)
-&gt; Bool {
return true
}

Y las funciones que llaman el selector.

La primera, hacemos que los gestos se tengan que ejecutar en la parte izquierda de la pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
@objc func respondToLeftPanGesture(gesture: UIPanGestureRecognizer){
gesture.setTranslation(CGPoint.zero, in: self.view)
let sitioRightPanGesture = gesture.location(in: self.view)
if sitioRightPanGesture.x &lt; (self.view?.frame.width)! / 2 {
switch gesture.state {
case .began:
print("Inicio PanGesture")
case .ended:
print("Termino PanGesture")
default:
break
}

En la segunda hacemos que los gestos se tengan que ejecutar en el lado derecho de la pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
13
@objc func respondToRightPanGesture(gesture: UIPanGestureRecognizer){
gesture.setTranslation(CGPoint.zero, in: viewDerecha)
let sitioRightPanGesture = gesture.location(in: self.view)
if sitioRightPanGesture.x &gt; (self.view?.frame.width)! / 2 {
switch gesture.state {
case .began:
print("Inicio PanGesture")
case .ended:
print("Termino PanGesture")
default:
break
}
}

El siguiente problema, fue que me reconociera la dirección en la que se movía el dedo y mover a Eric en consecuencia evitando las diagonales, al final también lo resolví y lo veremos en el siguiente post. Mientras podéis ir haciendo vuestras pruebas y no os olvidéis probar la primera parte Viking Platform – Eric & the 4 power stones.

Cada nueva descarga me ayuda a seguir desarrollando y a crear nuevos juegos para  que los podáis disfrutar en vuestro dispositivo iOS.

Viking Platform – Eric & the 4 power Stones

Viking Platform – Eric & the 4 Power Stones es un juego de aventuras tipo plataforma inspirado en el game play del antiguo y mítico Rick Dangerous con el que tanto disfrutamos algunos. Viking Platform no tiene mucho de habilidad, la clave es recordar cada una de las pantallas para conseguir evitar las trampas e ir avanzando en el Juego.

Odín te ha encomendado una misión, Salvar el mundo. Recorre 4 apasionantes escenarios y reúne las piedras de poder necesarias para acabar con el Ragnarök. Salta, encuentra cofres ocultos, elimina a los enemigos guardianes de las piedras de poder y guía a Eric en esta apasionante aventura de plataformas. ¿Te atreves?

2 respuesta a “Viking Platform II – Eric & the Onyx Heart. El desarrollo.”

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.