Foros del Web » Programando para Internet » Android »

Juego con corona SDK (LUA)

Estas en el tema de Juego con corona SDK (LUA) en el foro de Android en Foros del Web. Estoy tratando de aprender a programar con corona SDK con lenguaje LUA, y tengo una duda de ver si se puede hacer, quiero hacer un ...
  #1 (permalink)  
Antiguo 10/03/2014, 04:10
 
Fecha de Ingreso: febrero-2005
Mensajes: 143
Antigüedad: 19 años, 2 meses
Puntos: 0
Juego con corona SDK (LUA)

Estoy tratando de aprender a programar con corona SDK con lenguaje LUA, y tengo una duda de ver si se puede hacer, quiero hacer un juego el cual se podrán conseguir cosas en el, y mas adelante sera online, lo que dudo es si se puede guardar la información en una base de datos externa (MySQL de una web por ejemplo), ya que me gustaría que los datos de los usuarios y la informacion de sus progresos estuvieran ahí almacenados.

Entonces a ver si podéis guiarme sobre como hacerlo, he mirado una web que dice como leer datos de una base MySQL a traver de un intermediario PHP, pero no creo que sea eso lo que busco..

Saludos!
  #2 (permalink)  
Antiguo 10/03/2014, 04:31
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Juego con corona SDK (LUA)

La ventaja de este tipo de SDK's es que permiten compilar mediante un único código para diferentes plataformas, con lo que obtendrás acceso a una mayor cantidad de público. El problema que te puedes encontrar es el precio. Personalmente antes que optar por Corona SDK probaría si Cocos2d-x o lilbgdx cumplen los requisitos que necesitas.

Sobre el otro tema que comentas. Lo ideal es tener un webservice que haga de front-end al acceso a la bbdd que tengas en el servidor. De esta forma toda la lógica está en los clientes pero los datos se van guardando en el servidor, pese a que los clientes tengan cacheados (en sqlite) parte de los datos.

Resumiendo, y fuera aparte del "dilema" de que SDK escoger, la arquitectura sería:
- Móvil para la "capa de presentación" (UI del juego)
- Un webservice en php que recibe las peticiones del juego y le envía los datos.
- Una bbdd (en mysql, por ejemplo) que contiene los datos y que es consultada únicamente por el webservice (y no directamente por la app).

Si tienes alguna duda sobre la estructura dime :)
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 10/03/2014, 04:45
 
Fecha de Ingreso: febrero-2005
Mensajes: 143
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Juego con corona SDK (LUA)

Esa es la estructura que vi en el ejemplo de internet, y bueno, me pareció que igual podía ser algo lento en la aplicación móvil, osea, entiendo que cuando se realice un cambio debo actualizar la Base de datos al momento, y esto seria estar continuamente enviando datos, no se si se resentiría la fluidez del juego.

Elegi corona SDK por la facilidad del lenguaje LUA, y por que la verdad es que sin complicaciones logre crear un .apk para ejecutarlo en mi movil y probar.

No se si los Cocos2d-x o lilbgdx son tan sencillos de usar o que lenguajes usan, pero los mirare, de momento solo quiero ir creando cosas para ir aprendiendo, y en ese sentido Corona SDK tiene unos ejemplos bastante buenos para el uso de todas las funciones de los dispositivos (GPS,ACELEROMETRO,etc..) y esta bastante bien.

gracias!
  #4 (permalink)  
Antiguo 10/03/2014, 05:04
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Juego con corona SDK (LUA)

Cita:
Iniciado por Chete Ver Mensaje
Esa es la estructura que vi en el ejemplo de internet, y bueno, me pareció que igual podía ser algo lento en la aplicación móvil, osea, entiendo que cuando se realice un cambio debo actualizar la Base de datos al momento, y esto seria estar continuamente enviando datos, no se si se resentiría la fluidez del juego.
El truco está en no tener que enviar datos todo el rato, sino al principio y al fin. No se que tipo de juego quieres hacer, pero supongamos uno como el "Candy Crush". Se comunicaría al servidor que vas a jugar la pantalla "1", de forma que actualice tus datos en el servidor y te descuente los puntos,etc. Durante el puzzle no envias datos al servidor, únicamente cuando se acabe la partida para poder indicar si se ha resuelto correctamente o no.

Sobre los SDKs, diria que Cocos2dx usa C++ y compila mediante el NDK y libgdx usa java. Seguro que hay más opciones para soportar LUA, de hecho Cocos2dx lo hace.
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 11/03/2014, 05:57
 
Fecha de Ingreso: febrero-2005
Mensajes: 143
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Juego con corona SDK (LUA)

Gracias por los consejos, otra duda que me queda, estoy realizando las pruebas sobre un juego tipo tamagotchi, quiero decir que digamos que algunas estadísticas del personaje del juego, deben bajar aun con el juego cerrado, es decir, si necesitamos darle de comer, necesito que aunque cierren el juego, al personaje le siga bajando el nivel de hambre y quizá avisar al usuario de que su mascota tiene hambre con un aviso.

¿Esto como podría conseguirlo?

Tengo avanzada la idea de este tipo, pero me ha frenado eso, también tenia la idea de partidas cooperativas ONLINE, pero esta idea creo que es mucho mas complicada, así que de momento solo lo enfocare a batallas por turnos, que creo que es mas fácil.

Muchas gracias!
  #6 (permalink)  
Antiguo 11/03/2014, 06:43
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Juego con corona SDK (LUA)

Cita:
Iniciado por Chete Ver Mensaje
Gracias por los consejos, otra duda que me queda, estoy realizando las pruebas sobre un juego tipo tamagotchi, quiero decir que digamos que algunas estadísticas del personaje del juego, deben bajar aun con el juego cerrado, es decir, si necesitamos darle de comer, necesito que aunque cierren el juego, al personaje le siga bajando el nivel de hambre y quizá avisar al usuario de que su mascota tiene hambre con un aviso.

¿Esto como podría conseguirlo?
Pou, que es una aplicación del estilo, trabaja en local (digamos con sqlite, por ejemplo) y tiene puesto que en una hora al día lanza los datos al servidor para guardar la información. En local se mantiene la información siempre y a modo de "backup" solo una vez al día, que en un juego de este tipo es más que suficiente.


Cita:
Iniciado por Chete Ver Mensaje
Tengo avanzada la idea de este tipo, pero me ha frenado eso, también tenia la idea de partidas cooperativas ONLINE, pero esta idea creo que es mucho mas complicada, así que de momento solo lo enfocare a batallas por turnos, que creo que es mas fácil.
Si al tipico juego individual del tamagotchi le quieres agregar esta funcionalidad, tendrás que hacer que guarde los datos en el servidor SOLO cuando haya una intervención por parte del usuario. Por ejemplo, si supongamos que tienes la salud al 100% tanto en el servidor como en cliente y tienes la lógica que cada 5 segundos disminuye un 1%. Yo lo que haría sería guardar el valor en el servidor junto a un timestamp de la hora del valor.

Por hacer el ejemplo fácil pongamos que está al 100% a las 12:00:00. Si el usuario no le da de comer y tiene una batalla a las 12:03:00, podemos saber que salud tiene: 3 minutos son 180 segundos, a 1% por cada 5 segundos quiere decir que le ha bajado la salud un 36%, es decir, que tiene la mascota al 64%. Y esto lo podemos saber sin que haya echo una sola petición al servidor en esos 3 minutos.

Ahora ponte que le hubiese dado una poción a las 12:02:00 para recuperar un 20% la salud. Pues tu enviarias una peticion al servidor con la información: el usuario 'x' ha tomado la poción del 20% a las 12:02:00. Solo una única petición. Entonces el php calcularía el estado de salud actual (a las 12:02:00): 2 minutos son 120 segundos, a un 1% por cada 5 segundos quiere decir que ha perdido un 24% de salud y por tanto estaba al 76%. Ok, ya tenemos que valor hay actualmente. A esto le sumamos el 20% de la poción y en el servidor pasará a estar "96% a las 12:02", en lugar de "100% a las 12:00". Y por supuesto del inventario restar la poción del 20%.

Para esto, sin contar el tema del inventario, te bastan 3 campos en la base de datos del servidor:
- uid o identificador del jugador (o mascota)
- salud (valor que indica el último % de salud informado)
- timestamp (hora en que se informó del último estado de salud)

A groso modo, y simplificando un poco, es así como funcionan los juegos de este tipo :)
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 11/03/2014, 09:08
 
Fecha de Ingreso: febrero-2005
Mensajes: 143
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Juego con corona SDK (LUA)

Muchas gracias ,me estas aclarando mucho y dando nuevas ideas.

Lo que no quiero tampoco es que el juego sea fácilmente modificable, osea si se guarda en una base de datos local, que luego actualiza de vez en cuando la base de datos online, no podría ser fácilmente manipulable e inseguro?
  #8 (permalink)  
Antiguo 11/03/2014, 10:06
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Juego con corona SDK (LUA)

Cita:
Iniciado por Chete Ver Mensaje
Muchas gracias ,me estas aclarando mucho y dando nuevas ideas.

Lo que no quiero tampoco es que el juego sea fácilmente modificable, osea si se guarda en una base de datos local, que luego actualiza de vez en cuando la base de datos online, no podría ser fácilmente manipulable e inseguro?
Obviamente la información que tiene mayor validez es la del servidor. La del cliente la has de tener como una especie de caché por si la app va a segundo plano y android la elimina de memoria, tener de donde tirar hasta que, de forma asíncrona, recarges los datos. Pero piensa que aunque tengas los datos en local, cuando haces las peticiones al servidor no le dirás "pone 100% de salud porque es lo que tengo en local", sino que le diras "aumentame un 20% con una poción" y el servidor aumentará en el servidor la salud y restará (en el servidor) el item del inventario. Es decir, solo pasas acciones al servidor y este las valida y las ejecuta. Lo de local es simplemente a modo de caché para tener los valores para cuando tengas que hacer el render de la pantalla del juego ;)
__________________
Aviso: No se resuelven dudas por MP!
  #9 (permalink)  
Antiguo 14/03/2014, 06:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 143
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Juego con corona SDK (LUA)

Gracias, estoy aun realizando pruebas pequeñas y ver que me puede servir, de momento he creado esto para hacer que una barra que sale en la pantalla se vaya vaciando ( seria la vida por ejemplo) y que necesites darle pociones, que aumentaran su vida.

Quiero saber si hay una forma mas sencilla de hacer esto:

Código:
local cantidadpocion = 1
local pocion = display.newText("pocion x " .. cantidadpocion, 100, 100)
local damevida = display.newCircle( 50, 10, 20, 20 )
damevida:setFillColor( 255, 255, 0 )

local blanco = display.newRect(120, 270, 102, 10)

local vida = 100
   digimon2 = display.newRect(121, 271, vida, 8)
   digimon2:setFillColor( 255, 0, 0 )

local function vidaDown()
  digimon2.isVisible = false
   
   if(vida>0)then
     if(vida>100)then
       vida = 100
          vida = vida-1
   digimon2 = display.newRect(121, 271, vida, 8)
   digimon2:setFillColor( 255, 0, 0 )
   else
   vida = vida-1
   digimon2 = display.newRect(121, 271, vida, 8)
   digimon2:setFillColor( 255, 0, 0 )
   end
     elseif(vida<=0)then
   digimon2 = display.newRect(121, 271, 100, 8)
   digimon2:setFillColor( 255, 255, 0 )
     end
     digimon2.isVisible = true
  end
timer.performWithDelay(200,vidaDown,0)

local rect = display.newCircle( display.contentWidth - 50, display.contentHeight - 10, 20, 20 )
rect:setFillColor( 255, 255, 0 )

function state1Cb( event )
  if (cantidadpocion>0) then
	vida = vida + 20
  cantidadpocion = cantidadpocion - 1
  pocion.text = "pocion x " .. cantidadpocion
else
  print("No tienes pociones")
  end
end

function addListener1()
    rect:addEventListener( "tap", state1Cb )
end


addListener1()  

function state2Cb( event )
	cantidadpocion = cantidadpocion + 1
  pocion.text = "pocion x " .. cantidadpocion
end

function addListener2()
    damevida:addEventListener( "tap", state2Cb )
end


addListener2()
Pido perdón por el desorden, aun estoy aprendiendo y meto cosas sin sentido en los nombres de variables o el código desordenado.

Si podéis probarlo o mirarlo y ver si eso justo se puede hacer de otra manera simplificada os lo agradecería, me lié un poco con el timer.performWithDelay, por que no entendía las opciones que tengo que poner dentro.

También tengo un sprite con física y gravedad, sale justo debajo de la barra de vida, y al dar a cualquier lado de la pantalla hace un "salto", me gustaría saber como puedo hacer que la barra que la he puesto justo encima salte con el sprite, osea, como si fuera la barra de vida de ese personaje, y salga justo encima de su cabeza siempre.

Y por ultimo otra duda que tengo es como puedo hacer que aunque el codigo no sea seguido, yo coloque las imágenes donde quiera, es decir, si pongo un circulo blanco y luego un circulo rojo, sale primero el rojo y debajo oculto el blanco, si quiero que el blanco pase a primer plano, ¿como lo tengo que hacer?

gracias!

EDITO:

También quiero saber si para hacer que la barra baje necesito hacer todo el rato el .isVisible = true y false, si no hago eso todo el rato se crea la imagen sin quitar la anterior y se hacen muchas barras, pero igual hay una forma mas sencilla.

Y por ultimo, he notado que a veces cuando la vida esta en 0 un rato, si doy al boton de dar vida, no hace nada, pero si le doy otra vez ya si rellena la vida, no se es como si hubiera retardo y no llegara la señal de dar vida.

GraciaS!

Última edición por Chete; 14/03/2014 a las 06:36 Razón: Mas preguntas
  #10 (permalink)  
Antiguo 22/01/2015, 18:45
laricus1986
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Juego con corona SDK (LUA)

hola alguien puede darme clases de corona lua necesito terminar un ejecicio

Etiquetas: juego, php, sdk
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:58.