Buenas pues me pasa una cosilla rara y no doy con ello. Quiero que compruebe los procesos tipo fantasmas que no se solapen unos con otros,el caso esque si cambio el identificador "ID2" por "Id_Elfo" me va bien todos los procesos fantasmas se quedan a la distancia que pongo,pero cuando lo uso para ellos mismos....
1 - No se mueven ---> Creo que al usar Get_ID(TYPE Fantasma) cojen el suyo propio y como la distancia entre ellos es igual...
2 - Ahora se mueve,problema al crear otro fantasma el que se movia se queda parado,y asi sucesivamente ,se mueve hasta que se crea otro y encima no respentan la distancia,aqui dejo con los ultimos cambio....
[code language="bennu"]// *************************************
// * PROCESO ENEMIGOS (TIPO FANTASMAS) *
// *************************************
PROCESS Fantasma(X,Y);
// Variables Privadas tipo proceso
PRIVATE
BYTE TimeAnimalo; // Temporizador 1
BYTE TimeAnima; // Temporizador 2
BYTE dist; // Distancia Minima de un proceso con otro proceso
INT Id2; // Id2 identificador
BEGIN
File=ficheros[4]; // Fichero de graficos
Ctype=C_Scroll; // Coordenadas de Scroll
Region=1; // Region donde se mostrara el proceso
Resolution=100; // Resolucion del proceso
Graph=1; // Grafico del proceso
TimeAnima=Get_Timer(); // Iniciador del temporizador
// Bucle principal del proceso
LOOP
// Comprobación que este dentro de la region asignada
IF(!Out_Region(Id,1))
// Obtención de los indentificadores de los procesos de tipo "Fantasma"
Id2=Get_Id(TYPE Fantasma);
// Comprobación de que no sea su propio identificador
IF (Id2==Id)
Id2=0;
FRAME;
END
// Si existe otro proceso de tipo "Fantasma" comprueba
// que no este lo suficientemente cerca para que no se solapen unos con otros
IF (Id2)
dist=Get_Dist(Id2);
IF (dist>2500)
Angle=Get_Angle(Id_Elfo);
Advance(100);
END
ELSE
// De no existir otros procesos deja mover libremente
Angle=Get_Angle(Id_Elfo);
Advance(100);
END
// Colisión con el personaje
IF (Collision(Id_Elfo))
Health-=10;
Signal(Id,S_Kill);
END
// Sentencias de animacion del proceso
TimeAnimalo=Get_Timer()-TimeAnima;
IF (TimeAnimalo>=100)
IF (Graph==4)
Graph=1;
TimeAnima=Get_Timer();
ELSE
++Graph;
TimeAnima=Get_Timer();
END
END
END
FRAME;
END
END[/code]
Gracias....
Aqui os dejo el pantallazo ,donde se ve que se solapan ...
(http://<a%20href="http://www.mediafire.com/imageview.php?quickkey=zivjzzziwmj&thumb=5"%20target="_blank"><img%20src="http://www.mediafire.com/imgbnc.php/9d727bd5cc254808421b54495a6bf0dd4g.jpg)
Yo por ahora, solo soy capaz de decirte que esto
[code language="bennu"]IF (Id2)
dist=Get_Dist(Id2);
IF (dist>2500)
Angle=Get_Angle(Id_Elfo);
Advance(100);
END[/code]
No será suficiente para lo que quieres conseguir, ya que paralizará al fantasma obviando el angulo en el que se encuentre el otro proceso, con lo que cuando dos procesos están a 2500 se paralizan mutuamente. Desde mi punto de vista te falta hacer una comprobación de que el fantasma a chequear no se encuentre en el angulo por donde va a pasar: tipo if(get_angle(id2) no se aproxime a get_angle(id_elfo)), algo así.
Si cierto langhengar,no me di cuenta de eso,graicas y karma++,me lo voy a plantear de otra forma...pero vamos que valla bobada que estaba haciendo xD