Octubre 15, 2014, 07:00:52 PM Ultima modificación: Octubre 18, 2014, 10:53:37 AM por codex
hola.

me gustaría saber si alguien sabe como hacer varias lineas de visión como en la imagen
usando el colision_line.
no me entero muy bien como poder usarlo gracias..



Hice un ejemplo, se dibujan flechas de los azules a los rojos sólo cuando pueden verse. La parte importante es el código que está en el evento "Draw" de "obAzul".


#3 Octubre 16, 2014, 07:26:08 PM Ultima modificación: Octubre 16, 2014, 07:41:26 PM por codex
hola.


lo e estado integrando en mi juego.. pero me han salido un problema. hice este código.

[STEP EVENT]
///ataque
if activa=1{
with  unit_red

   if( collision_line(other.x,other.y,x,y,solid_parent,false,true) <0 ) {
      var en_linea;
      en_linea= collision_line(other.x,other.y,x,y,solid_parent,false,true) <0
     
        if (en_linea){       
          if not position_meeting(global.xx,global.yy,en_linea){
             field_controller.image_single=1   
          }
        }
       
    }else{
        field_controller.image_single=0
   
    }

}


este código en teoría hace que cuando pasas del ratón por encima de la instancia "unit_red" que supuesta mente se puede "ver", cambia la "image_single" del ratón hasta hay, bien... El problema; que lo hace en todas las instancias "unit_red" incluso en la que no puedes ver.  ¿alguna forma de solucionarlo?
gracias

Bueno, primero hay unos errores en el código:

  • No es necesario hacer dos veces el chequeo con la función collision_line, basta con poner el primer if
  • En la función position_meeting, como índice de objeto, estás colocando un valor lógico, en éste caso siempre vale 1, que corresponde con el segundo objeto que creaste en tu proyecto.
  • La variable image_single no debe ser usada, ni siquiera aparece en el manual, mejor usa la variable image_index.

Lo que entiendo es que quieres que la forma (o sprite) del puntero cambie cuando se coloca encima de un objeto "unit_red", pero sólo cuando el objeto jugador pueda ver ésa instancia, dime si es correcto, si es así creo que hay una forma más fácil para implementarlo.


#6 Octubre 17, 2014, 09:27:10 PM Ultima modificación: Octubre 17, 2014, 09:31:06 PM por Clamud
Prueba con éste código:
[gml]
//si el puntero está encima de un objeto "unit_red"
if( collision_point(mouse_x,mouse_y,unit_red,false,true) > 0 )
{
    //y no hay un bloque en la línea que va del objeto jugador al puntero
    if( collision_line(x,y,mouse_x,mouse_y,obBloque,false,true) < 0 )
         cursor_sprite = spCursor1; //poner un sprite
    else cursor_sprite = spCursor0; //si no, poner el otro sprite
}
else cursor_sprite = spCursor0;
[/gml]
También necesitarás ejecutar ésta línea:
[gml]window_set_cursor( cr_none );[/gml]

hola... me fue muy bien.
lo adapte a mi juego con este código .

///ataque
if activa=1{
   
   
    if  collision_point(global.xx,global.yy,unit_red,false,true) >0
    {
    if (collision_line(x,y,global.xx,global.yy,wall_parent,false,true) <0 ){
          field_controller.image_index=1
               
        }else{
            field_controller.image_index=0
       }
   }else{
        field_controller.image_index=0 
   
    }


}


gracias!