Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: KayasamiX en Noviembre 04, 2019, 05:00:22 PM

Título: depth con draw a otro nivel [ SOLUCIONADO! ]
Publicado por: KayasamiX en Noviembre 04, 2019, 05:00:22 PM
necesito una ayuda. por razones del multijugador es mejor proyectar los jugadores, enemigos, balas, fxs, etc etc,, utilizando draw, pero el caso esta en que, al utilizar el draw el depth (o capa o como suene mejor decirlo ._. ) de las proyecciones no se valdrían del depth de los objetos la cual es  depth=-y;...

asi que. una forma para reparar esto es anotar en la lista de proyecciones los objetos que esten en una posicion "Y" menor a mayor
para que las proyecciones tengan su respectivo depth.

se que se puede lograr con uno o mas 'for' pero no me gustaria que fuera tan pesado.

agradeceria una ideas o mejores aun.

grasias por si tiempo :3

///////////////////////////////////////////////  [ SOLUCION ] ///////////////////////////////////////////////

var Total= instance_number( Player) + instance_number( Enemy);
// asignar los valores inst
        for( a=0; a<instance_number(Player); a++ )begin
            Inst[ a ]=instance_find(Player, a);
            Insttxt[ a ]="Player";
        end
        for( b=0; b<instance_number(Enemy); b++ )begin
            if( instance_exists( instance_find(Enemy, b) ) )begin
                Inst[ instance_number(Player)+b ]=instance_find(Enemy, b);
                Insttxt[ instance_number(Player)+b ]="Enemy";
            end
        end
// ordenar instances
        // refresar el nulificador
            for( e=0; e<Total; e++ )begin Nulificador[e]=0; end
        // analizador
            for( c=0; c<Total; c++ )begin
                for( d=0; d<Total; d++ )begin
                    // esto encuentra el valor mas alto y lo guarda
                        if( CantidadAlta < Inst[ d ].y )begin
                            if( Nulificador[d]=0 )begin
                                CantidadAlta= Inst[ d ].y;  // esto es para seguir analizando
                                Instancia= Inst[ d ];            // esto guarda el id del obj para después enviarlo por la buffer con su orden.
                                TextoOBJ= Insttxt[ d ];       // esto es para determinar que tipo de obj. (se que se puede hacr de una mejor forma)
                                Lugar= d;                             // esto guarda el lugar seleccionado
                            end
                        end
                    // hacer el intercambio y nular la opcion escogida
                        if( d = Total-1 )begin
                            Nulificador[ Lugar ]= 1;
                            Inst_ext[ c ]= Instancia;
                            Insttxt_ext[ c ]= TextoOBJ;
                        end
                end
                CantidadAlta=0;
            end
    // enviar informacion ordenada
        for( f=0; f<Total; f++ )begin
            var Sm= (Total-1)-f;
            switch( Insttxt_ext[ Sm ] )begin
                case "Player" : PlayerBuffer_Data(' buffer que etamos utilizando ' , Inst_ext[ Sm ]); break;
                case "Enemy" : EnemyBuffer_Data(' buffer que etamos utilizando ' , Inst_ext[ Sm ]); break;
            end
        end
Título: Re:depth con draw a otro nivel
Publicado por: BssString en Noviembre 10, 2019, 01:48:51 AM
Hola KayasamiX!

Vi algo similar hecho por Friendly Cosmonaut en YouTube.
Este es el link: https://www.youtube.com/watch?v=8QCgN2RDA9I&list=PLSFMekK0JFgx0F31GzbW_Cg2GeM0ErwLP

Lo que ella hace es crear una ds_grid de ancho 2 y alto n que almacena el objeto que ella quiere dibujar y la "y" (o depth) en que quiere dibujar ese objeto. Luego ordena la grid según la depth y desde un objeto maestro dibuja los otros objetos 1 a 1.

En tu caso (como no usas objetos) deberás crear una ds_grid de ancho 5, para que almacene: sprite, sub-imagen, X, Y, depth por cada sprite que quieras dibujar. Después ordenas la ds_grid según la "depth" y en el draw event de un objeto maestro dibujas cada sprite en orden.

Saludos
Título: Re:depth con draw a otro nivel
Publicado por: KayasamiX en Noviembre 15, 2019, 12:52:25 AM
gracias amigo :) esto me puede dar ideas muy buenas. los 'grids' son increíbles, pero mas pesados que los 'for' pero eficaces.
yo ya he solucionado esto así que, editare la publicasiòn para adjuntar el código. espero que les paresca guay.

grasas. agradeciendo. abrazos. :)