Bennu Game Development

Foros en Español => General => Topic started by: Drumpi on June 12, 2009, 12:00:32 PM

Title: Duda de novato (Fenix)
Post by: Drumpi on June 12, 2009, 12:00:32 PM
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).
Title: Re: Duda de novato (Fenix)
Post by: Drumpi on June 12, 2009, 12:01:53 PM
Ultimo fichero (he añadido mi compilador-intérprete, por si acaso).
Title: Re: Duda de novato (Fenix)
Post by: splinter_work on June 12, 2009, 02:05:17 PM
a ver si te podemos dar una mano... saludos...
Title: Re: Duda de novato (Fenix)
Post by: SplinterGU on June 13, 2009, 12:11:47 AM
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
Title: Re: Duda de novato (Fenix)
Post by: DCelso on June 13, 2009, 10:52:28 AM
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
Title: Re: Duda de novato (Fenix)
Post by: SplinterGU on June 13, 2009, 01:22:17 PM
eso no es lo unico que hay que cambiar...
Title: Re: Duda de novato (Fenix)
Post by: DCelso on June 13, 2009, 01:40:43 PM
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.
Title: Re: Duda de novato (Fenix)
Post by: SplinterGU on June 13, 2009, 02:23:33 PM
exacto!

podria ser que tu disparo y el disparo de tu enemigo, pasen a la vez por alguna de las 2 barreras.
Title: Re: Duda de novato (Fenix)
Post by: Drumpi on June 16, 2009, 10:54:29 AM
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)