Dudas diversas!!

Started by ErPera, April 06, 2011, 03:02:56 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

ErPera

Me estoy volviendo locooooo con tanto Bennu!!!! Y ya solo me queda un mes para entregar el proyecto, y voy bastante retrasado, pero me atasco con algunas cosa, que alomejor son tonterias, pero no las soluciono.

Dudas:
  1ª Tengo mi personaje y dispara, quiero que si choca contra alguna pared el disparo desaparezca, muera ese proceso. Todo ejemplo que encuentro es con el (collision) pero esto es el choque con una dureza. Si voy buscando el pixel de la dureza como cuando ando, tendria que ir avanzando la bala de 1 en 1 (x+=1) lo cual iría muy lenta, y si voy a velocidad por ejemplo x+=10, no vale la comprobacion de 1 en 1 pixel porque va de 10 en 10.
Al poner:

       REPEAT

x+=10;
color=map_get_pixel(0,16,x+10,y);

FRAME;

if(graph!=15)
graph+=1;
end

    UNTIL ((x>x+240) OR (color==colorObstaculo))


Los primeros 10 pixeles se los pasa por la piedra, entonces yo quiero avanzar a la velocidad de 10 pixeles pero que si encuentra tal y como disparo a los 5 pixeles la pared que "explote".

La 2ª duda, es que mi personaje, al cambiar de grafico al chocarse contra una pared tambien, ese grafico es mas grande, es decir, es el mismo muñeco pero con la escopeta al hombro, lo que le hace "más alto" el sprite, y al cambiar del sprite de movimiento al de choque, el sprite baja, como si bajara un escalón, y no se como hacer para que se mantenga a la misma altura.

Gracias de antemano!

Saludos!!!.

P.D.:He usado un post anterior para no llenar el foro de post mio con mis torpezas xD
;D

FreeYourMind

EStudiate el codigo de Castle of dr malvado.

l1nk3rn3l

maneja las plataformas como un personaje mas


process plataforma(x,y,graph)
begin
 

 loop
   //verificas colision con protagonista con x, y
  // codigo para mover plataforma y prota al tiempo - si aplica
 // etc

   frame;
 end;

end;

ErPera

FreeYourMind:

No consigo pasarme de la primera fase... vamos del principio... no sabia que en el juego las había xD

l1nk3rn3l:
Había pensado eso, pero no estaba seguro si era la manera mas correcta de afrontar una dureza

Graciasss

FreeYourMind

Ese juego te enseña todo lo que necesitas para hacer un juego de plataformas, es el ejemplo que venia con div.

Nunca hay la forma correcta, hay  multiples formas de hacer lo mismo en programación, es esa la magia de este mundillo.

ErPera


SplinterGU

tendras que hacer tantos get_pixel+if, como sea necesario... hay otra solucion mas compleja, que seria colisionar contra la dureza, pero no tengo tiempo de explicarla, si te revisar el codigo ejemplo que yo hice del sabrewulf, lo vas a ver, pero no voy a poder explicarlo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

La momia que fuma

Quote from: ErPera on April 06, 2011, 03:02:56 PMSi voy buscando el pixel de la dureza como cuando ando, tendria que ir avanzando la bala de 1 en 1 (x+=1) lo cual iría muy lenta

Haz la comprobación avanzando pixel a pixel, pero "fuera de frame", con un bucle for por ejemplo, vas pixel a pixel comprobando pero sin llamar a frame, hasta que lo hayas movido los pixeles que quieres que se mueva por fotograma o te topes con un muro, en cuyo caso rompes el bucle....

ErPera

Quote from: SplinterGU on May 03, 2011, 05:06:44 PM
tendras que hacer tantos get_pixel+if, como sea necesario... hay otra solucion mas compleja, que seria colisionar contra la dureza, pero no tengo tiempo de explicarla, si te revisar el codigo ejemplo que yo hice del sabrewulf, lo vas a ver, pero no voy a poder explicarlo.

Así lo hice, vamos, lo tengo como comentario, pero lo borre al poner el código, ya que creía que no sería la solución mas eficiente... con 10 get_pixel+if

Quote from: La momia que fuma on May 03, 2011, 06:11:41 PM
Quote from: ErPera on April 06, 2011, 03:02:56 PMSi voy buscando el pixel de la dureza como cuando ando, tendria que ir avanzando la bala de 1 en 1 (x+=1) lo cual iría muy lenta

Haz la comprobación avanzando pixel a pixel, pero "fuera de frame", con un bucle for por ejemplo, vas pixel a pixel comprobando pero sin llamar a frame, hasta que lo hayas movido los pixeles que quieres que se mueva por fotograma o te topes con un muro, en cuyo caso rompes el bucle....

Le echaré un ojo a este también, a ver que tal, pero tal y como me ha dicho Splinter ya lo tengo resuelto.


SplinterGU

lo que dije yo o lo que dijo momia es basicamente lo mismo, repetir get_pixel e ifs dentro del mismo frame.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Creo que tengo una situación similar, os cuento, mi problema es que tengo un processo en el cual compruebo colision con otro proceso, el objetivo es que al colidir uno con otro estos se paren y queden pegados uno al otro (sus graficos claro), lo que pasa es que utilizo un frame(200) y algunas veces la colision no queda precisa y ambos graficos entran uno dentro del otro, me imagino que es por el frame(200) ya que hace la comprobación de forma mas lenta.

Alguna forma de comprobar la colision dentro del proceso, pero sin alterar el valor del frame y que esta sea siempre precisa ?

ErPera

Me funcionó lo que decís, solo que me pasa una dudilla, que probablemente sea una tonteria.

REPEAT

while(cont<10)
IF(map_get_pixel(0,16,x+1,y)==colorObstaculo)
[b]ID_disp=get_id(type disparo);
signal(ID_disp,s_kill);[/b]
break;
else
x+=1;
end
cont++;
end
cont=0;
FRAME;

if(graph!=15)
graph+=1;
end


UNTIL (x>x+240)


El signal se carga todos los disparos, es decir el get_id está mal... he probado poniendo (son) en ves de (type disparo) pero nada, ¿Cómo recogo bien el ID?

Y aquí termina mi primera duda de las 2 planteadas  ;D

Drumpi

Free: si tienes FRAME(200) y quieres hacer sólo la comprobación de colisión cada frame, puedes "dividir" el frame(200) y copiar dicho código de colisión en medio. Algo así:

(... tu codigo)
frame(100);
(código de colisión)
frame(100);
(... lo que vaya después de frame(200))

ErPera: get_id te puede devolver el id de un disparo, o cero si no hay ninguno ¡controla ese cero!
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

ErPera

Quote from: Drumpi on May 04, 2011, 07:11:02 PM
...

ErPera: get_id te puede devolver el id de un disparo, o cero si no hay ninguno ¡controla ese cero!

¿Cómo? Es que es eso... como controlar cada ID del disparo... si hay 2 disparos diferentes... y al pillar la ID del tipo disparo pilla la id de los 2 disparos, y mata todos los procesos disparo, y yo solo quiero matar al que choca, como he puesto en el código

SplinterGU

el que colisiona no sale con get_id, sino con collision.

get_id nunca te retorna id de 2 procesos a la vez, eso es imposible retornar en un unico valor de retorno.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2