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