Para los que no leyeron el post anterior, estoy haciendo un juego para HTML5 pero que fácilmente podría ser compilado para Flash, PC o MAC, y con un poco mas de trabajo, Android, Windows Phone o IOS, la primera parte aquí.
Estuve revisando mi antiguo post y me di cuenta que no hubo mucho amor en el, fue más un: corran este código y les va a funcionar, aunque estaba bastante bien explicado igual creo que debí hacer un poco mas de esfuerzo, pero es que ahora estoy intentando terminar el juego que comencé y no tengo mucho tiempo, pero la verdad esto del marketing te absorbe el tiempo en demasía, bueno la pregunta sería: y tanto trabajo en marketing al final ¿Como te esta yendo?, primero lo malo:
Facebook-> Ciertamente no me he esforzado mucho en este tema y eso se puede reflejar en los unicos 3 “Me Gusta”, es un poco triste pero es la verdad, la unica campaña que hize fue un par de post aqui en el blog, después nada
Twitter-> Despues del disparo inicial ahora tengo 183 seguidores, no esta mal, aunque hay que considerar que muchos no hablan español, pero son un buen canal para pasar la voz sobre mi juego.
Blog-> Este creo que ha sido mi mayor trabajo y por ende mi mayor satisfacción, solo dejare que los numero hablen por mi:
Como verán, he subido de forma constante durante el año hasta un 394% Genial! luego les pasare algunos tips sobre como lo logre, en que falle y que me dio los mejores resultados, mi meta ahora es conseguir más gente todavía, ¿lo lograré? Con mucho esfuerzo y trabajo, ahora si lo bueno, la siguiente parte del tutorial de PONG O con detección de colisiones.
Parte 1, Colisiones entre la paleta del Jugador y la bola
Dejamos el juego antes chocando con las paredes pero nadie podía responder bueno es hora de que nosotros podamos responder, para esto creamos un método que detecte las colisiones, su base serán las coordenadas, es decir cuando la bola “invada” las coordenadas de la paleta, el método retornara True:
'Metodo para ver si la paleta del jugador colisiono con la bola Method CheckPaddleCollP:Bool() If bolaX > 625.0 Then 'Si la bola esta en una posicion X mayor a 625 (posicion de la paleta) 'Si las coordenadas de Y de la bola esta entre la coordenadas de Y de la paleta If ((bolaY >= paletaY-25.0) And (bolaY <= paletaY+25.0)) Then Return True Endif Endif Return False End
Parte 2, Colisiones entre las paletas del Enemigo y la bola
Si recordaran del código anterior, tenemos 2 enemigos, no uno, entonces tenemos que crear una función que no solo devuelva si choco o no choco la bola con la paleta enemiga, también tiene que devolver con cual paleta choco, entonces el código iría así:
'Metodo para ver si la paleta del enemigo colisiono con la bola Method CheckPaddleCollE:Int() For Local i:Int = 0 To 1 'Si coordenada X la bola esta entre las coordenadas X de la paleta del enemigo If (bolaX > (enemigoX[i]-5)) And (bolaX < (enemigoX[i]+5)) Then 'Si coordenada Y la bola esta entre las coordenadas Y de la paleta del enemigo If ((bolaY >= enemigoY[i]-25.0) And (bolaY <= enemigoY[i]+25.0)) Then 'Retornamos la posicion del array de la paleta enemiga Return i Endif Endif Next 'Si no choco con nadie entonces devolvemos -1 Return -1 End
Parte 3, colocamos las funciones en el método UpdateGame
Es hora de probar nuestras nuevas funciones, para esto simplemente las llamamos y en caso sean True o tengan una numero mayor a -1 harán que el comportamiento de la bola cambie, se mueva en la otra dirección, todo esto dentro de la función UpdateGame:
'Si hubo colision entre la paleta del jugador y la bola, y si la velocidad de la bola es mayor a 0 '(bolaVelX > 0 = la direccion es de izquierda a derecha) If (CheckPaddleCollP() = True And bolaVelX > 0) Then bolaVelX *= -1 'Cambiamos la trayectoria del balon 'Si a la coordenada Y de la bola le restamos la coordenada Y de la paleta y es positivo 'Si la bola choco con la parte superior de la paleta y debe ir hacia arriba If ((bolaY - paletaY) > 7) Then bolaVelY = 1.5 'Al reves, la bola choco con la parte inferior de la paleta y debe ir hacia abajo If ((bolaY - paletaY) < -7) Then bolaVelY = -1.5 'Si choco la centro, entonces ira de frente If ((bolaY - paletaY) <= 7) And ((bolaY - paletaY) >= -7) Then bolaVelY = 0 Endif 'Recogemos la variable que contiene el numero de paleta enemiga que colisiono con la bola Local i:Int = CheckPaddleCollE() 'Si hubo colision entre la paleta del enemigo y la bola, y si la velocidad de la bola es menor a 0 '(bolaVelX < 0 = la direccion es de derecha a izquierda) If (i >=0 And bolaVelX < 0) Then bolaVelX *= -1 'Cambiamos la trayectoria del balon 'Si la bola choco con la parte superior de la paleta y debe ir hacia arriba If ((bolaY - enemigoY[i]) > 7) Then bolaVelY = 1.5 'Al reves, la bola choco con la parte inferior de la paleta y debe ir hacia If ((bolaY - enemigoY[i]) < -7) Then bolaVelY = -1.5 'Si choco la centro, entonces ira de frente If ((bolaY - enemigoY[i]) <= 7) And ((bolaY - enemigoY[i])>= -7) Then bolaVelY = 0 Endif
Parte 3, ahora los estados del juego
Todo juego tiene diferentes estados, los principales son estado de juego, pausa y terminado, para lograr este cometido en nuestro juego PONG O utilizaremos las 2 variables inicializadas en el primer tutorial, que son modoMensaje y modoJuego, si por ejemplo modoMensaje es cero entonces la maquina debería mostrar un mensaje, si en caso fuera 1 no lo debería hacer, en el modoJuego definimos hasta 3 variables, 0 es porque el juego va a iniciar, si es 1 es porque el juego esta funcionando y si es 2 es porque el juego acabo, y además crearemos 2 funciones que las actualicen:
'Metodo para iniciar el juego Method StartGame:Int() 'Si el modoMensaje es 0 entonces mostramos el mensaje If modoMensaje = 0 Then modoMensaje = 1 'Cambiamos el modo mensaje a no mostrar Print ("Presione P para iniciar") 'Imprimimos Endif 'Si presiono la tecla P If KeyHit(KEY_P) Then modoMensaje = 0 'Cambiamos el modo mensaje a 0 modoJuego = 1 'Modo = Modo Jugando Endif Return True End 'Metodo para Terminar el juego Method GameOver:Int() 'Si el modoMensaje es 0 entonces mostramos el mensaje If modoMensaje = 0 Then modoMensaje = 1 Print ("G A M E O V E R") 'Si el enemigo tiene puntos mayores o iguales a 10 If puntosEnemigo >= 10 Then Print ("No llores! la computadora gano, quizas a la siguiente.") Else Print ("Felicitaciones, Ganaste! Debe ser tu dia de suerte.") Endif Print ("Presiona P para reiniciar el juego") Endif 'Si presiono la tecla P If KeyHit(KEY_P) Then 'Reiniciamos todos los datos puntosEnemigo = 0 puntosJugador = 0 Print (puntosEnemigo + ":" + puntosJugador) paletaY = 240.0 bolaX = 320.0 bolaY = 240.0 bolaVelX = 3.5 bolaVelY = 1.5 enemigoY[0] = 240.0 enemigoY[1] = 240.0 modoMensaje = 0 'Colocamos al modo juego como jugando modoJuego = 1 Endif Return True End
Parte 4, solo nos queda reemplazar el método OnUpdate
Bueno ya solo nos queda eso y es bastante simple, solo utilizamos un Case:
Method OnUpdate:Int() 'Recogemos la variable modoJuego Select modoJuego 'Si es cero Case 0 StartGame() 'Si es uno Case 1 UpdateGame() 'Si es dos Case 2 GameOver() End Return True End
Ok eso fue todo para este tutorial, si no entendiste bien esto del tema de juegos, quizás te sea mejor ir por mis posts antiguos sobre desarrollo de juegos.
Comente en la primera parte del tutorial sobre PlayN y HaxeNME, la verdad es que me quede sin espacio ni tiempo, pero les dejare unos links que me parecieron interesantes, la única opinión que tengo después haber leído algunos posts en foros y blogs es que haxeNME es un poco difícil pero muy veloz y PLayN esta en pañales (vi un tutorial de la instalación y no parece fácil) Lo más probable es que haga un pequeño tutorial acá también sobre PlayN en algún momento, pero no por ahora, me parece mucho más facil monkey, quizás como contra tenga que tienes que pagarlo, pero como plus es que tienes donde quejarte si tienes problemas, a diferencia de los anteriores que son de código libre.
http://blog.allanbishop.com/category/tutorial/
http://playn-2011.appspot.com/slides/index.html#1
Lo cierto es que ahora cualquier lenguaje puede ser multiplataforma, si eres desarrollador ActionScript y no tienes dinero para comprar la suite adobe puedes utilizar http://flashdevelop.org/ que te deja compilar para Android o IOS, osea que ahora hay mas herramientas para hacernos las cosas mucho más faciles, tiempos aquellos donde todo iba de cero, es por eso que la competencia ahora es brutal
Bueno les dejo el código de todo el juego en la siguiente pagina de este post, los veo pronto!
Suerte!
Hola Donde esta el codigo?
Hola, al final de mi post dice Me gusta: mas abajo dice “Páginas: 1 2” haz click en el 2, suerte!!
[…] Bueno primero y antes que cualquier cosa les digo que voy a utilizar el MonkeyCoder, específicamente el código resultante de este y este post. […]
[…] pidieron que hiciera un review del libro que les comente aquí, y del cual hice un tutorial aquí y aquí, bueno la verdad es que esta semana no tengo nada que postear ya que me la pase aprendiendo a […]