Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: DCelso on December 09, 2008, 10:51:19 AM

Title: técnica proceso clon
Post by: DCelso on December 09, 2008, 10:51:19 AM
Hola a todos, quisiera recrear la técnica de clonar un proceso y ponerlo desplazado para adelantar las colisiones producidas en esa posición desplazada y resulta que con collision(0) (devuelve el id de cualquier tipo de proceso con el que colisione) necesito saber el tipo de proceso con el que he colisionado.
Eh mi caso:

Begin
set_mode(256,165,32);
set_fps(25,0);
person(50,50);
ceiling(50,20);
Ground(50,80);
    while (!key(_esc))
frame;
end
let_me_alone();
End

process person (x,y)
public
   int id_collision;
begin
    graph = new_map(20,20,32);
    map_clear(0,graph,RGB(255,0,0));
    mirror(x,y,0,-4);
    write_var(0,100,50,0,id_collision);
    while (!key(_esc))
        if (key(_up) and (id_collision == 0) ) y--;end       
        if (key(_down)) y++;end       
        if (key(_left)) x--;end       
        if (key(_right)) x++;end       
        Frame;
end
unload_map(0,graph);
end

process  Ceiling(x,y)
begin
    graph = new_map(20,20,32);
    map_clear(0,graph,RGB(255,255,0));
    while (!key(_esc))
        Frame;
end
unload_map(0,graph);
end

process  Ground(x,y)
begin
    graph = new_map(20,20,32);
    map_clear(0,graph,RGB(0,0,255));
    while (!key(_esc))
        Frame;
end
unload_map(0,graph);
end

process mirror (x,y,desp_x,desp_y)
private
    person id_father;
    int id_collision;
begin
    alpha = 150;
    id_father = father;
    while (!key(_esc))
        graph = id_father.graph;
        x = id_father.x+desp_x;
        y = id_father.y+desp_y;
        id_collision = collision(0);
        while (id_collision)
            id_collision = collision(0);
            if (id_collision != id_father)
                id_father.id_collision = id_collision;
            end
            id_collision = collision(0);
        end
        Frame;
end
end


Ahora no se distinguir entre el proceso ceiling y el proceso ground. Así que si chocamos con el cuadrado azul ya no nos deja subir con la flecha hacia arriba. Y solo quiero que pase contra el cuardado amarillo.
En la línea del proceso person

        if (key(_up) and (id_collision == 0) ) y--;end       

necesitaría poner algo como
        if (key(_up) and (get_type(id_collision) != ceiling) ) y--;end       
Sabeis como se puede obtener el tipo de un proceso o que otra alternativa hay?
Gracias de antemano.
Title: Re: técnica proceso clon
Post by: SplinterGU on December 09, 2008, 02:12:25 PM
LOCAL
   int proc_type;


#define _PROC_AAA    1
#define _PROC_BBB    2

process AAA
begin
   proc_type = _PROC_AAA;
end

process BBB
begin
   proc_type = _PROC_BBB;
end


...

pcol = colision(....);

... exists(pcol) ...

...

if ... pcol.proc_type ...

Title: Re: técnica proceso clon
Post by: DCelso on December 09, 2008, 02:30:55 PM
Gracias :D,
estaba pensando en hacer eso mismo que casualidad.
Pero ¿no existe algo como lo que hace la función collision? cuando le pasas como parámetro type proceso1.
Title: Re: técnica proceso clon
Post by: SplinterGU on December 09, 2008, 03:08:23 PM
No existe
Title: Re: técnica proceso clon
Post by: SplinterGU on December 09, 2008, 03:11:41 PM
en teoria, en vez de usar los defines, podes hacer


proc_type = type AAA;

proc_type = type BBB;

type XXX, devuelve un valor numerico que identifica el tipo de proceso, pero no hay ningun valor en las variables del proceso que almacenen eso, y tampoco una funcion que lo devuelva... creo que estos valores se mantienen y se corresponden en el compilador como en el interprete, deberia revisar, de ser asi, seria interesante una funcion que devuelva ese valor numerico y que pueda ser comparado con un "type XXX"
Voy a anotarlo, para ver si es posible hacerlo...