Div Games en Html5 y Canvas

Started by AmakaSt, September 07, 2012, 03:28:01 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

JaViS

Quote from: AmakaSt on October 16, 2012, 08:40:55 PM
Sí, hay 2 proyectos. Uno se basa en BennuGD y otro en Div. Pienso que cuantos más lenguajes Div-Like hayan mejor, siempre habrá más en donde elegir y se mantendrá viva y creciente la comunidad. :)


Muchas gracias por la clarificación!
Working on Anarkade. A couch multiplayer 2D shooter.

Transdiv

#46
Me baje el XAMPP Lite portable y cuando ejecuto el programa de scroll por ejemplo, no se muestra el efecto de scroll con las imagenes 001 y 002 en comparación con la version que se ejecuta desde tu pagina web :





AmakaSt

Qué raro lo del scroll... te pasa también en el ejemplo de collision?

Prueba en usar una versión XAMPP más completa que la lite portable o Wamp y que sean de lo mas reciente posible.

Y aquí subiré los códigos de DivGO, en breve:  :)
http://code.google.com/p/divgo/

Sobre la licencia, ¿Cual me recomendáis? Yo puse dual MIT / GPL que es la que usa jQuery y Mootools.

Un saludo.

Transdiv

Sips, lo probe en la version completa y lo mismo, pero parece ser que tiene que ver con el código, ya que lo puse en un website e igualito. (Collision tambien falla el fondo). Respecto a las licensias quizas la persona mas adecuada seria Splinter que ya ha estado con ese tema.

Salu2



Transdiv

Ya se soluciono lo de los graficos de fondo, un problema que hay (tambien en la version anterior), es que cuando ejecuta el collision luego de una rato como que el programa se cuelga aunque se siguen escuchando sonidos al fondo. Eso me ocurre con el Firefox en WinXP pero no en Windows 7, El Internet 9 tambien se cuelga luego de un rato y nunca salen los sonidos. Con Chrome no hay ningun problema.

Supongo que esos problemas son parte de la "delicia" de programar multi-browser.

Salu2




AmakaSt

Quote from: PiXeL on October 17, 2012, 01:28:44 PM
Pinta genial! :D Aunque para los hardcore se nos queda un poco corto aún, pero va por buen camino.


Nada más se pueda portaré alguno de mis juegos al completo.
Según veo no se pueden crear Structs aún, ¿no?
¿Permitirás usar load_png?


Este código hace explotar DivGO sobremanera xD




program vilanet;


global
   music;
   wavs[10];


   //MODO DE PANTALLA Y FPS
   ancho_pantalla=480;
   alto_pantalla=800;
   frameskip=2;
   _fps=25;
   
   //UI
   matabotones;
   id_boton_menu;
   opcion_menu;


   ready;
   doble_clic;
   dificultad;
   distancia;
   obstaculos_en_pantalla;
   puntos;
   fuente;
   
   //DIVGO!!!
   os_id=1003;
   focus_status=1;
   
Private
   graph_loading;
   
Local
   i;
   accion;
begin
   //establecemos la pantalla a utilizar y su tamaño
   frame;
   
   //inicializamos el modo gráfico, fps y nombre de la ventana
   set_mode(480,800);
   set_fps(_fps,frameskip);
   
   //ponemos el gráfico de "cargando"...
   //graph_loading=load_png("loading.png");
   put_screen(0,graph_loading);
   frame; //tengo que hacer 2 frames para que lo de arriba funcione :|
   frame;
   //unload_map(0,graph_loading);
   
   //cargamos los recursos a utilizar durante todo el juego
   carga_sonidos();
   
   //cargamos el fpg de gráficos
   load_fpg("fpg/vilanet.fpg");
   
   //la fuente
   fuente=load_fnt("fpg/1.fnt");
   
   //si no estamos en android, ponemos algo para localizar el cursor
   if(os_id!=1003)
      mouse.graph=71;
   end
   
   //y finalmente el menú
   //menu_tactil();
   
   juego();
end


process juego()
Private
   retraso=100;
   retraso_esquiador;
   anterior;
   nuevo;
begin
   //graph=get_screen();
   let_me_alone();
   clear_screen();
   controlador();
   puntos=0;
   distancia=0;
   obstaculos_en_pantalla=0;
   x=ancho_pantalla/2;
   y=alto_pantalla/2;
   start_scroll(0,0,11,0,0,15);
   //scroll[0].camera=camara();
   camara();
   prota();
   ready=0;
   write_int(fuente,ancho_pantalla,0,2,&puntos);
   
   //ponemos la canción de fondo del juego
   //music=load_song("ogg/2.ogg");
   //play_song(music,-1);
   music=load_sound("ogg/2.ogg");
   sound(music);
   ready=1;
   loop
      distancia++;
      puntos+=1+(dificultad/3);
      while(alpha>0) alpha-=5; frame; end   
      dificultad=6+(distancia/100);
     
   //   if(rand(0,100)=<dificultad)
         if(obstaculos_en_pantalla<5)
            if(retraso>50-dificultad*2)
               loop
                  nuevo=rand(1,5);
                  if(nuevo!=anterior) break; end
               end
               obstaculo(nuevo,rand(15,19));
               anterior=nuevo;
               retraso=0;
            else
               retraso++;
            end
         end
   //   end
      if(retraso_esquiador>100)
         retraso_esquiador=rand(-100,0);
         esquiador(rand(1,5));
      else
         retraso_esquiador++;
      end
   
      //botón esc, salir
      if(key(_esc))
         while(key(_esc)) frame; end
         let_me_alone();
         //graph=get_screen();
         x=ancho_pantalla/2; y=alto_pantalla/2; z=-100;
         //menu_tactil();
         //from alpha=255 to 0 step -15; frame; end
         //unload_map(0,graph);
         break;
      end
      frame;
   end
end


Function carga_sonidos();
Begin
   from i=1 to 7;
      //wavs[i]=load_sound("wav/"+i+".wav");
   end
End


Function sonido(num);
Begin
   //play_sound(wavs[num],0);
End


//hace una capa de emulación del táctil para pc y gestiona el boton de volver
Process controlador();
Begin   
   loop
      if(mouse.left)
         dedo(mouse.x,mouse.y);
      end
      /*for(i=0; i<10; i++)
         if(multi_info(i, "ACTIVE") > 0)
            dedo(multi_info(i, "X"),multi_info(i, "Y"));
         end
      end*/
      frame;
   end
End


Process dedo(x,y);
Begin
   priority=1;
   graph=71;
   alpha=0;
   frame;
End


Process prota();
Private
   retraso;
   anim;
Begin
   //flags=B_VMIRROR;
   x=ancho_pantalla/2;
   y=alto_pantalla-70;
   z=-2;
   graph=5;
   loop
      if(anim<10-(dificultad/5))
         anim++;
      else
         if(graph<10) graph++; else graph=5; end
         anim=0;
      end
      if((os_id==1003 and mouse.left) or os_id!=1003)
         if(x<mouse.x)
            x+=20;
            if(x>mouse.x) x=mouse.x; end
         else
            if(x>mouse.x)
               x-=20;
               if(x<mouse.x) x=mouse.x; end
            end
         end
      end
      if(x<(ancho_pantalla/10)) x=ancho_pantalla/10; end
      if(x>ancho_pantalla-(ancho_pantalla/10)) x=ancho_pantalla-(ancho_pantalla/10); end
      if(retraso>100)
//         if((os_id==1003 and mouse.left and mouse.y<(alto_pantalla/4)*3) or (os_id!=1003 and mouse.left))
//            disparo();
//            retraso=0;
//         end
      else
         retraso++;
      end
      if(accion<0) break; end
      frame;
   end
   if(accion==-1) explosion(); end
   if(accion==-2) sonido(5); from size=100 to 0 step -10; frame; end end
   gameover();
End


Process disparo();
Begin
   x=father.x;
   y=father.y;
   z=-1;
   graph=4;
   size=200;
   while(y>-100)
      if(accion==-1)
         from alpha=255 to 0 step -30;
            size+=3;
            frame;
         end
         break;
      end
      y-=20;
      angle+=20000;
      frame;
   end
End


Process obstaculo(pos_x,graph);
Private
   id_col;
   pos_x; //FAILURE!
Begin
   y=-100;
   if(graph==18) pos_x=1; end
   if(graph==19) pos_x=5; end
   if(graph==18 or graph==19)
      y=-600;
   end
   x=((pos_x-1) * (480/5))+(480/10);
   z=-1;
   size=150;
   if(collision(type obstaculo))
      //signal(s_kill,id);
   end
   size=100;
   obstaculos_en_pantalla++;
   loop
      if(id_col=collision(type prota))
         if(graph==18 or graph==19)
            id_col.accion=-2;
         else
            id_col.accion=-1;
         end
      end
      if(graph<18)
         if(id_col=collision(type disparo))
            if(graph==17) //explosion
               explosion();
            end
            id_col.accion=-1;
            if(graph==15 or graph==16) sonido(3); end
            break;
         end
         if(y>alto_pantalla+100) break; end
      else
         //barrancos
         if(y>alto_pantalla+600) break; end
      end
      y+=3+dificultad;
      frame;
   end
   //explosion
   from alpha=255 to 0 step -30; y+=3+dificultad; frame; end
   obstaculos_en_pantalla--;
End


Process explosion();
Private
   anim;
Begin
   sonido(4);
   x=father.x;
   y=father.y;
   z=-2;
   graph=22;
   while(graph<27)
      if(anim==4) graph++; anim=0; else anim++; end
      size+=10;
      alpha-=5;
      y+=3+dificultad;
      frame;
   end
     
End


Process esquiador(pos_x);
Private
   id_col;
   pos_x;
Begin
   x=((pos_x-1)*(480/5))+(480/10);
   y=-100;
   z=0;
   graph=20;
   size=150;
   if(collision(type obstaculo))
      esquiador(rand(1,5));
      //signal(s_kill,id);
   end
   size=100;
   if(collision(type obstaculo))
      //signal(s_kill,id);
   end
   while(y<alto_pantalla+100);
      if(graph==20)
         if(id_col=collision(type disparo))
            id_col.accion=-1;
            graph=21;
            sonido(2);
         end
         if(collision(type obstaculo))
            graph=21;
            sonido(3);
         end
         if(collision(type prota))
            puntos+=1000;
            sonido(2);
            break;
         end
         y+=6+dificultad;
      else
         y+=3+dificultad;
      end
      frame;
   end
End


Process camara();
Begin
   loop
      scroll.y0-=3+dificultad;
      frame;
   end
End


Process gameover();
Begin
   delete_text(all_text);
   write(fuente,ancho_pantalla/2,(alto_pantalla/4)*3,4,puntos);
   x=ancho_pantalla/2;
   y=(alto_pantalla/2);
   graph=705;
   z=-10;
   while(is_playing_song()) frame; end
   let_me_alone();
   delete_text(all_text);
   juego();
   //menu_tactil();
end


Process get_screen();
Begin
End


Process load_song(string basura);
Begin
End


Process is_playing_song();
Begin
End


Process fade_music_off();
Begin
End


En la versión 0.12 no funcionan las tablas asi que wavs[10] no funciona y detiene todo. Esto ya esta arreglado para la próxima versión.

Por el momento lo que tengo ya para la próxima versión:
- declarar tablas: mitabla[12]
- frame ya funciona como div o muy similar
- load_png(), load_svg(), load_jpg(), load_gif(), load_bmp();

Lo que quiero terminar y todavía está pendiente:
- locales: father, brother, son;
- mas funciones: out_region(); get_pixel(); map_get_pixel(); graphic_info();

Un saludo.

panreyes

Apunta también la local id! Creo que en algunos de tus ejemplos la utilizas para controlar un texto

AmakaSt

Ya disponible nueva versión 0.14, novedades:
  - Nuevas funciones disponibles: out_region(); get_pixel(); map_get_pixel(); graphic_info(); stop_scroll(); collision_box(); load_png(); load_svg(); load_jpg(); load_gif(); load_bmp();
  - Nuevas variables locales: id, father, son
  - Ahora se pueden declarar tablas: mitabla[9]
- Colisiones "pixel perfect" con la función collision(); y se mantiene las colisiones por cajas con collision_box(); //esta última es mas rápida
  - Cambios en el entorno de trabajo de DivGO: lista de procesos y lista de fpgs cargados desde el código.

Y como siempre, puede que me deje alguna cosa, más info en la web de DivGO. :)

Un saludo.

l1nk3rn3l


AmakaSt

Ya esta disponible para descargar la versión 0.14!  8)

Un saludo.

AmakaSt

En breve subiré la versión 0.16, había un bug que me tenía bloqueado.  :)
Un resumen de lo que habrá en esta próxima versión de Div GO:
Mas optimización, en esta versión corre un mayor numero de procesos y la colisión pixel perfect es también mas rápida.  8)
Funciones: write_in_map(); new_map(); itoa();
En esta versión se arregla lo de juntar el código a los paréntesis: if(key(_left))x++;end
Y otro fallo arreglado... ahora se declaran las variables pasadas en los procesos como privadas, ej: process nombre_proceso(variable_inventada); //variable_inventada será una variable private dentro del proceso nombre_proceso

Y hay mas novedades cuando actualice en breve.  ;)

Un saludo.

l1nk3rn3l


AmakaSt

Quote from: l1nk3rn3l on November 28, 2012, 10:42:32 PM
PROBANDO

Todavia no esta subido, para esta tarde o el viernes por la tarde mirare de actualizar Div GO.  :)

AmakaSt

Ya está disponible Div GO 0.16, con algunas novedades mas con respecto a lo que dije el otro día:
- scan_code (en el ejemplo de las key se puede probar)
- variable local fx = (fx_normal, fx_source_in, fx_source_out, fx_source_atop, fx_dest_over, fx_dest_in, fx_dest_out, fx_dest_atop, fx_lighter, fx_darker, fx_copy, fx_xor)
- variable global para cambiar el estilo de los textos text_style = (txt_paint_normal, txt_paint_italic, txt_paint_bold, txt_stroke_normal, txt_stroke_italic, txt_stroke_bold) (en el ejemplo de write se puede probar)
- función is_playing_sound(); que devuelve 0 o 1 dependiendo si el sonido esta reproduciéndose.

Y por el momento eso es todo.  :)

Un saludo.