Problemilla

Started by DjSonyk, November 16, 2009, 12:04:33 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DjSonyk

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....

DjSonyk

Aqui os dejo el pantallazo ,donde se ve que se solapan ...

laghengar

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í.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

DjSonyk

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