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..
(https://imagizer.imageshack.us/v2/505x505q90/913/ED81Sf.png)
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".
wow!! impresionante... muchas gracias
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.
si.. exactamente eso
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!