Hola a todos:
Bueno, pues nada, que me he quedado atascado, a la vez que anodadado, con un error tan tonto como que no me detecta la colisión. No sé si es que las neuronas las tengo en huelga por el sobreesfuerzo de los exámenes o es que soy así de malo.
Os comento: tengo este juego de navecitas playerVSplayer, los disparos colisionan sin problemas con rocas, obstáculos y naves, pero en el nivel que estoy haciendo ahora, el de los meteoritos, las barreras protectoras no detectan la colisión con los disparos, y no se por qué. El código de los disparos, naves y barreras están todos juntos en naves.inc, está todo bastante bien estructurado (creo), no creo que os perdais.
Empiezo a pensar que se me ha corrompido el compilador.
Muchas gracias. Podeis jugarlo si quereis, la pega es que los controles están definidos para la GP2X, así que el P1 usa arriba, abajo y S, y el P2 usa Z, X y espacio. La definición de las teclas está en teclas.inc (podeis usarlo para vuestros proyectos con GP2X si quereis).
Ultimo fichero (he añadido mi compilador-intérprete, por si acaso).
a ver si te podemos dar una mano... saludos...
caramba! si que choca, bueno, por lo menos en bennu... igual hay un monton de cosas que necesitan correccion con respecto al collision... aca te pongo los fixes, pero para bennu... no se si funciona en fenix...
bueno, en fenix tambien colisiona, pero incluso colisiona la propia barrera (cuando no deberia)... en fenix incluso parece que el arbol genealogico no va muy bien, supongo que en realidad se trata de que nunca quedan hijos huerfanos. (este texto no va, me confundi yo, tenia el write fuera del if... :P )
No se, pero te sugiero uses bennu.
funcion barrera correcta
process barrera (numero)
private
temp;
begin
//priority=id_jugadores[numero].priority-1;
resolution=id_jugadores[numero].resolution;
file=gr_barrera;
graph=1;
//flags=16;
switch (numero)
case 0: angle=-90000; end
case 1: angle=90000; end
end
write_int(0,0,0,0,&temp);
while (exists(id_jugadores[numero]))
switch (numero)
case 0: x=id_jugadores[numero].x+200; end
case 1: x=id_jugadores[numero].x-200; end
end
y=id_jugadores[numero].y;
while(temp=collision(type disparo))
if (temp.father.father != id_jugadores[numero])
write(0,10,10,0,"CHOQUE");
say ("CHOQUE");
temp.energia=0;
end
end
/*temp=collision(type disparo_rapido);
if (temp)
if (temp.father != id_jugadores[numero])
temp.energia=0;
end
end
temp=collision(type disparo_cargado);
if (temp)
if (temp.father != id_jugadores[numero])
temp.energia=0;
end
end*/
frame;
end
end
funcion barrera correcta
El problema es que disparo_unico no tiene graph con qué chocar
Cambia esto
temp=collision(type disparo_unico);
if (temp)
write(0,0,0,0,"CHOQUE");
if (temp.father != id_jugadores[numero])
temp.energia=0;
end
end
Por esto otro y va bien. El padre del padre de disparo es el player, por eso está dos veces :D
temp=collision(type disparo);
if (temp)
write(0,0,0,0,"CHOQUE");
if (temp.father.father != id_jugadores[numero])
temp.energia=0;
end
end
El problema es que el disparo da a tu propia barrera también ya que sale de dentro ;D
eso no es lo unico que hay que cambiar...
por?
probado en bennu y fenix y va bien.
No puse el while porque, en teoría, no va a haber dos disparos a la vez colisionados en la barrera.
Aunque ahora que lo pienso como el disparo de tu nave también choca en tu barrera sí se podría dar el caso.
exacto!
podria ser que tu disparo y el disparo de tu enemigo, pasen a la vez por alguna de las 2 barreras.
Ostras, es verdad, sabía que era un fallo tonto:
Cada tipo de disparo llamaba a disparo (que es el encargado de moverse y llevar la animación... aunque no recuerdo ahora por qué lo dividí así ¿?).
Comprobar colision con disparo (supongo que sería por esto, por simplificar, o por algun tipo de disparo raro más adelante), y comprobar que el padre de su padre no es el padre de la barrera (es decir, comprobar que no estamos atravesando la barrera propia).
Muchas gracias a los dos, karma para ambos :D
PD: si, más adelante lo haré en Bennu, como comenté en otro hilo, pero mientras, estoy haciendo las pruebas en Fenix (cuando lo empecé, aun no existía "Bennu2X" ;D)