Div Games Online en Html5 y Javascript

Todo aquello que no está relacionado con Gemix Studio ni con la programación DIV en general.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Sun Jun 02, 2013 4:25 pm

Ya está para descargar. :)
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Wed Jun 26, 2013 6:14 am

Hola Amaka, puedo pedirte una función para tu DivGO?

El caso es que ejecutarla por código consume bastante, pero en javascript va como un tiro de rápida, lo he probado y funciona exageradamente bien, es la famosa función constraint() que programé para mi motor de física dinámica, sería un detalle si la incluyeras como nativa para procesos.

Por si no estás al día de lo que hace te lo explico en resumen, creo que es una función valiosa que sirve para todos los juegos y que en definitiva suple las carencias de getDist() y getAngle() aunando su uso y aplicando el resultado a procesos directamente, con lo que la hace especialmente útil para este tipo de lenguajes.

En si la función constraint() es un integrador proporcional muy extendido en todos los motores de física actuales, se puede implementar de varias formas y se pueden aplicar los resultados de diversas maneras, pero las mas importante para un lenguaje estilo DIV es la posibilidad de unir mediante un joint a 2 procesos.

Si estás minimamente interesado en añadirla como nativa a tu engine no tengo ningún problema en explicarte detalladamente como funciona, los usos que se le puede dar, documentarla y comentarte los diversos overloads que debería tener para ser todo lo flexible que uno necesite.
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Wed Jun 26, 2013 2:27 pm

Hola Erkos,

Dime que tenias pensado, soy todo oídos. A ver si para la próxima versión puedo darte la alegría. ;)

Para unir dos procesos, por lo que dices, tengo una función ahora mismo (DivGO 0.28): get_union(id, distancia, elasticidad), hace como un pequeño campo gravitatorio entre dos procesos y puedes ajustar la distancia del centro y la elasticidad.

Un saludo.
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Wed Jun 26, 2013 3:57 pm

Anda pues seguramente te sirva la función que te quería comentar, lo que permite es esto:

A bajo nivel une dos vectores con una elasticidad que afecta al integrador proporcional, también se puede especificar si uno de los 2 vectores debe ser estático y no recibir la realimentación de corrección de posición.

A alto nivel que es lo que nos interesa:
Nomenclatura de la función "ya que se conoce en todos los lenguajes con este nombre sería bueno que se llamase así pero solo es una idea ;)"
INT CONSTRAINT();

Parametros:
Source Code (Gemix) [ Download ] [ Hide ]
  • constraint(int a, int aStatic, int b, int bStatic, float distancia, float elasticidad);


Donde:
'a' indica el ID del proceso A.
'aStatic' indica si el proceso A debe ser integrado.
'b' indica el ID del proceso B.
'bStatic' indica si el proceso B debe ser integrado.
'distancia' indica la distancia entre centros que debe integrar la función.
'elasticidad' indica la elasticidad que debe tenerse en cuenta para la integración "grado de rigidez de la unión/joint".

Código en Gemix de esta función:
Source Code (Gemix) [ Download ] [ Hide ]
  •  function constraint(int a, int aStatic, int b, int bStatic, float distancia, float elasticidad);
  • private
  •     float xdist;
  •     float ydist;
  •     float dist;
  •     float diff;
  •     float correccion;
  •     float angulo;
  • begin
  •     // comprovar si se trata de dos bodies fijos..
  •     if(aStatic == true && bStatic == true)
  •         Return(0);
  •     end
  •     // determinar la separación escalar entre bodies..
  •     xdist = a.x - b.x;
  •     ydist = a.y - b.y;
  •     // determinar la separación en el plano entre bodies..
  •         dist = sqrt((xdist*xdist) + (ydist*ydist));
  •     diff = dist - distancia;
  •         // si la distancia es despreciable no se hace nada (performance up!)..
  •     if(abs(diff) < 1)
  •         Return(0);
  •     end
  •     if(aStatic || bStatic)
  •                 correccion = diff;
  •         else
  •                 correccion = diff / 2.0;
  •         end
  •     // determinar el angulo que forman los centros de los bodies entre si..
  •     angulo = -atan2(xdist,ydist);
  •     // si el nodo a no es fijo se integra su nueva posición..
  •     if(!aStatic)
  •         a.x += correccion * sin(angulo) * elasticidad;
  •         a.y -= correccion * cos(angulo) * elasticidad;
  •     end
  •     // sie l nodo b no es fijo se integra su nueva posición..
  •     if(!bStatic)
  •         b.x -= correccion * sin(angulo) * elasticidad;
  •         b.y += correccion * cos(angulo) * elasticidad;
  •     end
  •    
  •     Return(0);
  • end  



Funcionamiento:
- Para usar esta función simplemente se deja dentro del bucle de un proceso, durante sucesivos frames la distancia entre los 2 procesos indicados en los parámetros de la función se irá integrando, esto no es lo mismo que crear el joint y mediante un identificador a el poder manipularlo, es la versión sin "engine" para usar, la cual creo que sería un buen punto de partida pues esta función es el núcleo de cualquier motor de física, en este caso está presentada por escalares con signo para evitar el uso de vectores por pura comodidad :P

Con esta simple función se consigen cosas como estas en Gemix, te pego un vídeo de mi librería de física usando esta función:
La cadena de bolas está creada exclusivamente con constraints, es una pasada.


Si añades esto y funciona bien en DivGO podemos mirar la otra función también super interesante que comprueba intersección entre un circulo y una linea, y con lo que he aprendido utlimamente casi podría decirte como hacer un pequeño motor de física para tu DivGO, es realmente mas simple de lo que parece, con constraints eficientes, y sin pretender hacer una ChipMunk o Box2D se puede perfectamente hacer un engine que permita física con objetos circulares y segmentos, que al final por rendimiento es lo que uno acaba usando aunque disponga de todo lo demás ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Wed Jun 26, 2013 4:16 pm

Es similar a la función que había añadido yo, el nombre de get_union era para seguir la filosofía del propio Div. :P

Me lo anoto para la próxima versión.
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Wed Jun 26, 2013 5:09 pm

Gracias Jose un detalle por tu parte ;)
El tema de los juegos web está en todo su auge, no se si durará pero la gente ya no quiere descargar ni gratis XD.. habrá que probar haber que pasa..
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Thu Jun 27, 2013 8:56 am

Pues ya tengo la función constraint() aplicada en DivGO, para la próxima versión. :y:

Si, los juegos web y sobre todo los juegos móviles, están en pleno auge.
Supongo también que la gente ahora es más selectiva a la hora de descargar un juego para ordenador, hay mucha competencia y si no se ve gráficamente impresionante (FULL HD y sin que se vea un solo pixel) o no tienen el suficiente 3d con efectos mágicos que te dejen medio estéril, como que cuesta. :mrgreen:

Un saludo.
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Thu Jun 27, 2013 2:21 pm

Que velocidad! Gracias por tenerla en cuenta.

Por cierto, un paso adelante en calidad sería tener un pequeño motor de física de verdad en DivGO, simplificaría mucho el diseño de los juegos, y aunque la gente suele decir que los juegos con física tienen ese efecto que "canta a leguas" no es cierto en absoluto, se pueden hacer muy fácilmente juegos estilo retro y no se nota nada raro en absoluto.

Sabias que Chipmunk está disponible para JS? y es realmente simple de usar Amaka, yo la estoy usando activamente y es realmente una librería sencilla de usar y con resultados buenisimos, es la lib que mas performance ofrece en 2D de las que tienen licencia MIT, hay port a Javascript jeje.. ahí te dejo el dato ;)
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby erkosone » Mon Jul 01, 2013 4:50 pm

Como llevas la nueva versión Amaka? alguna novedad interesante? fecha de salida de la versión descargable? voy a intentar montar un entorno 'todo-en-1' basándome en el Notepad++ como editor, haber que consigo..
User avatar
erkosone
 
Posts: 10654
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: Div Games Online en Html5 y Javascript

Postby AmakaSt » Mon Jul 01, 2013 9:46 pm

Fecha exacta no tengo... me gustaría tenerlo para este mes, antes de las vacaciones. 8-)
Lo del notepad++ también me lo estuve mirando, tengo instalada la versión 6.3.3, pero no pude configurarlo para que coja las funciones y variables de DivGO (autocompletar y colorear), o lo de pasar el código a compilador.php, aunque para esto último recuerdo haber encontrado tutoriales de como hacerlo.

Y las novedades, lo que ya hay funcionando actualmente para la versión 0.28:
- funciones: near_angle(), constraint()
- variables: timer[9], declaración de const (por compatibilidad con IE const crea variables globales)
- arreglo de muchos bugs del compilador: ahora hasta funciona el código de ejemplo en Div2 del juego plataformas
- arreglado problema con declaración de variables locales
- mejoras en el entorno, ahora el código se autoguarda bien cuando cierras el navegador

Y lo que tengo pendiente (o lo que desearía que ya incluyera esta versión):
- funciones: path_find(), path_free(), path_line()
- variables: s_kill_tree, s_sleep_tree, s_freeze_tree, s_wakeup_tree (actualmente funcionan s_kill, s_sleep, s_freeze, s_wakeup)
- arreglar fade()

Esto es todo.

Animo con el entorno, a ver si lo consigues!! :)
User avatar
AmakaSt
 
Posts: 402
Joined: Fri Oct 03, 2008 10:00 pm

PreviousNext

Return to Offtopic

Who is online

Users browsing this forum: No registered users and 6 guests