Nombre del creador: romon_28.

Breve descripción de su función: Dibuja un sprite con profundidad (depth)

Versión GM utilizada:   :GM6: :GM7: :GM8:

Código del Script "draw_sprite_ext_depth()":
/*

draw_sprite_ext_depth(sprite,subimg,x,y,xscale,yscale,rot,color,alpha,depth);
Igual que draw_sprite_ext() pero incluyendo el depth.

Nota: Se puede usar fuera del evento draw.
*/

if !variable_global_exists("Depth_RoMoN_")
{
global.Depth_RoMoN_=object_add();
object_event_add(global.Depth_RoMoN_,ev_create,0,
"
  L_Dw=ds_list_create();
");
object_event_add(global.Depth_RoMoN_,ev_draw,0,
"

if (ds_list_size(L_Dw)==0)
{
  instance_destroy();
  ds_list_destroy(L_Dw);
  exit;
}

for(i=0;i<ds_list_size(L_Dw);i+=9)
{
  Sp=ds_list_find_value(L_Dw,i+0);
  IS=ds_list_find_value(L_Dw,i+1);
  X =ds_list_find_value(L_Dw,i+2);
  Y =ds_list_find_value(L_Dw,i+3);
  XS=ds_list_find_value(L_Dw,i+4);
  YS=ds_list_find_value(L_Dw,i+5);
  Rt=ds_list_find_value(L_Dw,i+6);
  Cl=ds_list_find_value(L_Dw,i+7);
  Ap=ds_list_find_value(L_Dw,i+8);
  draw_sprite_ext(Sp,IS,X,Y,XS,YS,Rt,Cl,Ap);
}

ds_list_clear(L_Dw);
"
);
}

with(global.Depth_RoMoN_)
{
if (depth==argument9)
{
  sprite_index=argument0;
  for(i=0;i<9;i+=1)
  {
   ds_list_add(L_Dw,argument[i]);
  }
  exit;
}
}

with(instance_create(0,0,global.Depth_RoMoN_))
{
depth=argument9;
for(i=0;i<9;i+=1)
{
  ds_list_add(L_Dw,argument[i]);
}
}


Esto es una idea basica. Se podria implementar todos los codigos de dibujo (draw) como el mismo esquema, solo abria que hacer unos retoque pero no he tenido ganas. Al final solo hice este script a modo de ejemplo.

revivo este tema, pero para darte las gracias, aun no lo he probado pero ya supongo que si lo has puesto es que funca bien xd, llevaba tiempo buscando una manera de ponerle depth a los draws ;_;

GRACIAS!! una pregunta... ela depth de estos draws, son las mismas que la de los objetos? es decir, si pongo al player con depth 4 y un sprite verde con draw depth a 3 y otro spriete rojo también con draw a 5... saldrá ordenadamente mezclándose bien los dos tipos de deph, viéndose primero el spr verde, siguiéndolo el depth normal del player y finalmente el sprite rojo??
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Aunque suene un poco absurdo, las funciones 3d funcionan en modo 2d (solo que la proyección no es la misma claro)
Intenta utilizar esto
d3d_set_depth(profundidad)

Si me equivoco, avisame :P

no funciona  :-X me quedo con el mio por ahora :P

Cita de: romon_28 en Noviembre 12, 2014, 01:08:21 PM
no funciona  :-X me quedo con el mio por ahora :P

Ya entiendo porqué, habra que intentar con esto:

Evento Create
[gml]d3d_start();
d3d_set_projection_ortho(view_xview,view_yview,view_wview,view_hview,view_angle);[/gml]

Evento Step/End Step
[gml]d3d_set_projection_ortho(view_xview,view_yview,view_wview,view_hview,view_angle);[/gml]

Evento Draw
[gml]
d3d_set_projection_ortho(view_xview[view_current],view_yview[view_current],view_wview[view_current],view_hview[view_current],view_angle[view_current]); //Esto solo es necesario si van a utilizar más de una view
d3d_transform_set_identity();
d3d_transform_set_translation(x,y,depth_aqui);
draw_sprite(spr_sprite,-1,0,0)
d3d_transform_set_identity();
[/gml]