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.

AmakaSt

#1005
Hola oskarg,

Son muchísimos ciclos cambiando la imagen antes de frame, habían versiones previas (no se cual es la 1.65, con DivGO todavía no lo he alcanzado) que no cambiaba el dato de imagen y al hacer map_get_pixel() no detectaba el cambio de color en el pixel, al aplicar esto se perdió optimización. He probado en hacer cambios al map_put_pixel() y parece que he ganado algunos fps, he pasado de 10 a 15 fps, sigue siendo lento pero es una mejora.

Cree graphic_builder() y graphic_explorer() como una alternativa a cómo trabaja map_put_pixel(), creo que ya lo explique en otro comentario. La función map_put_pixel() hace lo que las otras dos dentro del bucle, por eso tiene peor rendimiento.

Y aún se puede mejorar más el rendimiento de la función graphic_builder() que has compartido sacando esta función del bucle for():


// Ejemplo de compilador online Div GO
// Php + Html5 + Canvas + Javascript
// by J. Manuel Habas

program ejemplo_graphic_explorer;

global

    txt, i, count, grafico1, grafico2;
    velocidad = 1, random;
    fichero;

begin
    set_mode(320, 200);
    set_fps(60, 0);
    screen_color(#059);
    fichero=load_fpg("graficos/help");

    write_int(0,100,100,0,offset fps);


    grafico1 = graphic_explorer(fichero, 2);
   
    x = 320/2;
    y = 200/2;
   
    loop
        grafico2  = graphic_explorer(fichero, 1);

        velocidad = grafico2.width - 1;
        random = rand(0, 255);
       
        for (i = 0; i < sizeof(grafico2.data); i+=4)
            grafico1.data[i]   =  random;
            grafico1.data[i+1] =  random;
            grafico1.data[i+2] =  random;
            grafico1.data[i+3] =  255;
        end
       
        graph = graphic_builder(grafico1); //fuera del bucle mejor
       
       frame;   
    end
end


Así ya me va a 60 fps. :)

Un saludo.

oskarg

perfecto !!
Ya he implementado un map_put con este sistema y paso de 25 frames a 60 ...un cambio muy drastico.Tengo que mirar como crear unas rutinas...gracias




oskarg

Hola AmaKaSt,
Un bug del ide,En esta versión de divgo el deslizador para aumentar el tamaño de texto ha desaparecido sin más,estaba dibujado previamente en una posicion erronea,simplemente he compilado y ha desaparecido .
Un saludo.

oskarg

#1008
size code..

oskarg

Hola,
¿ como se inicia una tabla en divgo..estoy espeso ,no lo veo...?
Simplemente quiero hacer una struct de arrays.. muestro ejemplo que se entiende lo que pretendo pero falla.



/*
Program's Name: <My Program Name>
Author's Name: <My Name>
Company's Name: <My Company or Group>
*/

program Tablass;
global

struct tabla[6]
       i[2];
end       
                 

     


begin



set_title("tablas");
    //set_icon("graficos/009.png");

// screen canvas options
set_mode(128,128,3);
screen_color(cc_silver);

set_fps(60, 0);
    Inicia_tabla();



loop
if (key(_esc)) exit("Text Exit", 1); end

frame;
end
end



PROCESS Inicia_tabla()
BEGIN
tabla[1].i[] = 1,2,3;   


//write_int(0,100,100,0, tabla[1].i[0]);--daria 1
//write_int(0,100,100,0, tabla[1].i[1]);--daria 2
//write_int(0,100,100,0, tabla[1].i[2]);--daria 3

LOOP
FRAME;
END


END




AmakaSt

Hola oskarg,

Aquí te dejo de la manera que funciona:
/*
    Program's Name:    <My Program Name>
    Author's Name:    <My Name>
    Company's Name:    <My Company or Group>
*/

program Tablass;
global

struct tabla[6]
    i[2];
    //i[] = 1,2,3;
end       


begin



set_title("tablas");
    //set_icon("graficos/009.png");

    // screen canvas options
    set_mode(128,128,3);
    screen_color(cc_silver);

    set_fps(60, 0);
    Inicia_tabla();



    loop       
        if (key(_esc)) exit("Text Exit", 1); end

        frame;
    end
end



PROCESS Inicia_tabla()
BEGIN
//tabla[1].i[] = 1,2,3; //esta forma de declarar es valido dentro de global
tabla[1].i[0] = 1;   
tabla[1].i[1] = 2; 
tabla[1].i[2] = 3; 

//write_int() con offset
write_int(0,20,0,0, offset tabla[1].i[0]);
write_int(0,20,20,0, offset tabla[1].i[1]);
write_int(0,20,40,0, offset tabla[1].i[2]);

//write sin offset
write(0,100,0,0, tabla[1].i[0]);
write(0,100,20,0, tabla[1].i[1]);
write(0,100,40,0, tabla[1].i[2]);

LOOP
    tabla[1].i[0] ++;
    tabla[1].i[1] += 2;
    tabla[1].i[2] += 4;

    FRAME;
END


END


Un saludo. :)

oskarg

Gracias Amakast,
Estoy haciendo un juego y requiero manipular tablas, cuando lo acabe te lo paso .
Un saludo.

oskarg

Hola AmakaSt,
Como estás haciendo un editor de fuentes te hago esta sugerencia.

1.En ocasiones se requiere no aplicar suavidado en las letras,"es decir que se imprima tal cual como lo has concebido" como el caso de sokoban.Lo intenté  hacer cargando un fuente supuestamente dentada ,pero siempre  quedaba  borroso e ilegible   y de ahi que empleara graficos como si fueran letras .
Se puede en divgo programar un proceso que  escriba  letras ,no es complicado ,una vez hecho ya  puedo utilizarlo como plantilla , pero es algo a priori engorroso.

Un saludo.

panreyes

Buenas :) Sólo vengo a decir que me alegro mucho de que DivGO siga en marcha :) 💪🏼

AmakaSt

Quote from: oskarg on June 20, 2022, 01:46:36 PM
Hola AmakaSt,
Como estás haciendo un editor de fuentes te hago esta sugerencia.

1.En ocasiones se requiere no aplicar suavidado en las letras,"es decir que se imprima tal cual como lo has concebido" como el caso de sokoban.Lo intenté  hacer cargando un fuente supuestamente dentada ,pero siempre  quedaba  borroso e ilegible   y de ahi que empleara graficos como si fueran letras .
Se puede en divgo programar un proceso que  escriba  letras ,no es complicado ,una vez hecho ya  puedo utilizarlo como plantilla , pero es algo a priori engorroso.

Un saludo.
Hola oskarg,

En principio le tengo quitado el suavizado al editor, como en el editor de gráficos, pero las fuentes formato ttf son vectoriales y siempre se acaba suavizando algo.

Quote from: panreyes on June 20, 2022, 04:27:39 PM
Buenas :) Sólo vengo a decir que me alegro mucho de que DivGO siga en marcha :)
Gracias panreyes, en ello ando liado. :)

Un saludo.

oskarg

bug encontrado en tablas.
Cuando tenga terminado el juego te monto un ejemplo..
Te explico tengo esto:


struct posicion
x[3]
end

T_base[10,10];

...
....
hace cosas raras si lo pongo de esta manera tengo que crear una variable auxiliar e entonces va .

private
e;

valor = T_BASE[posicion.x[0],0] ; DA MAL EL RESULTADO...

if  (valor == 1 ) ......end
//me da siempre 1...

//EN CAMBIO SI HAGO ESTO:


e=posicion.x[0];

//  y le asigando e el contenido de posicion.x[0] y lo meto dentro de la tabla da bien el resultado.

valor = T_BASE[e,0] ; DA BIEN EL RESULTADO.
if  (valor == 1) ...end


oskarg

Buenos días AmaKaSt,
Pregunta tonta ...
Supongo que no se puede hacer esto..pero pregunto...


Tengo un proceso llamado A que gestiona el fondo con un graph=1.
Tengo otro proceso Llamado B.
Mi pregunta es ,puedo desde B hacer un map_put del graph=1 del proceso A   ?

Lo digo para no hacerlo todo dentro del proceso A.

oskarg

Seria como una especie de father,pero en vez de valores ,de graficos...

AmakaSt

Hola oskarg,

¿Y no te valdría pasando el valor del graph y el file de dicho proceso al otro por parámetro? O crear una función que pueda recibir esos valores por parámetro, siempre se puede usar las variables father.graph o son.graph.

Un saludo.

oskarg

#1019
Qué tonto!! No me acordaba 😄  Dentro de 5 días lo pruebo,es cuando tengo día libre y  te comento . gracias.ahh y te monto un ejemplo de poniendo el v struct tabla dentro de otra tabla no va, debo guardarlo en una variable..como puse arriba en el ejemplo