técnica proceso clon

Started by DCelso, December 09, 2008, 10:51:19 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

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.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

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

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

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.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

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...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2