collision modular

Started by fulgorelizz, August 02, 2012, 02:43:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

fulgorelizz

 ;D saludos chicos, bueno, tenia tiempisimo que no pasaba por aca, y ayer programando me vino algo super, o bueno a mi me parece util, trata de controlar las colisiones del protagonista o protagonistas de nuestro juego fuera del bucle principal de nuestro personaje.

en vista de que muchas veces tenemos que hacer subciclos dentro del ciclo principal, no podemos alcanzar las lineas de colisiones, y muchas veces nos vemos obligados a transcribir linea por linea las colisiones dentro de cada subciclo de nuestro personaje mientras este este vivo.

aca les dejo una ayudita quizas no sea gran cosa, pero a mi me alivia la vista entre tanto codigo xD

// modulos
import ....


process main()

local

int muerto=0;//este local es aplicado a todos los procesos que creemos, cada uno obviamente tendra su propio valor xD

end

begin

//configuraciones

protagonista();

repeat
frame;
until(key(_esc))

end

process protagonista()
begin
   ctype=c_scroll;// o c_screen, dependiendo del caso
   while(muerto==0)//bien dado el caso puede controlarse por niveles de energia o como vea conveniente
     

     //un subciclo que a veces aparecen
     from mivar=80 to 0 step -2;
         //aqui controlamos el subciclo
         control_collision(file,graph,x,y,flags,alpha,angle);//una copia temporal de nuestro protagonista dentro del subciclo
         if(muerto==1)break;end
         frame;
     end
     
     //aqui controlamos el ciclo principal
     control_collision(file,graph,x,y,flags,alpha,angle);//una copia temporal de nuestro protagonista
     
     frame;
  end
end

process control_collision(file,graph,x,y,flags,alpha,angle)
begin
    z=father.z+2;//lo coulto detras del padre
   
    //control de colisiones
    if(collision(type objeto_enemigo))father.muerto=1;end
    if(collision(type objeto_enemigo2))father.muerto=1;end
    if(collision(type objeto_enemigo3))father.muerto=1;end

    frame;
end


notas: esto simple vista ahorrara muchas lineas de codigo, usando correctamente los include puedes ahorrarte mucho tiempo de desarrollo, en el caso de hacer juegos de pelea donde tengas multiples personajes puedes manejarlo de esta manera y categorizar las colisiones dentro del proceso control colision, etc etc etc

espero les sea de utilidad , espero ayudarle pronto con otras cosas , saludos  ;D

aclaratoria: el proceso se genera con un frame con el fin de crear un duplicado momentanio del personaje principal con el fin de capturar unicamente el evento collision, se pudiera generar antes del bucle principall del padre, pero lo veo mas limpio de esta manera.

si tienen alguna observacion o critica nuclear sera bien recibida  8)
Compiling code -- generating exe...

KeoH

pues te vas a reir .. pero me viene de puta madre xDDDDDDDDDDDD Voy a probarlo .. si funciona como creo ... es una idea estupenda .. felicidades por adelantado xDD y gracias :)

SplinterGU

en vez de tantos parametros, podes hacer lo siguiente.


function control_collision()
begin
file=father.file;
graph=father.graph;
x=father.x;
y=father.y;
flags=father.flags;
alpha=father.alpha;
angle=father.angle;
   
    //control de colisiones
    if(collision(type objeto_enemigo))father.muerto=1;end
    if(collision(type objeto_enemigo2))father.muerto=1;end
    if(collision(type objeto_enemigo3))father.muerto=1;end
end


(no necesitas ocultarlo ni nada, porque solo es para controlar la colision, entra y sale)

igual no lo veo bien hacerlo como una funcion aparte, eso consume muchos recursos... si quieres evitar reescribir usa defines.

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

fulgorelizz

Quote from: SplinterGU on August 02, 2012, 03:59:35 PM
en vez de tantos parametros, podes hacer lo siguiente.

function control_collision()
begin
file=father.file;
graph=father.graph;
x=father.x;
y=father.y;
flags=father.flags;
alpha=father.alpha;
angle=father.angle;
   
    //control de colisiones
    if(collision(type objeto_enemigo))father.muerto=1;end
    if(collision(type objeto_enemigo2))father.muerto=1;end
    if(collision(type objeto_enemigo3))father.muerto=1;end
end


(no necesitas ocultarlo ni nada, porque solo es para controlar la colision, entra y sale)

igual no lo veo bien hacerlo como una funcion aparte, eso consume muchos recursos... si quieres evitar reescribir usa defines.




exactamente splinter!! bueno nunca he trabajado con define, seria bueno que nos dejaras un ejemplo aca mismo de como furula la cuestion, y pues tienes razon, podriamos evitarnos tantos parametros, venga splinter xD jajajaja es valido, gastaria recursos asi??? no creo que tantos, si escribo los procesos de esa manera supongo que te ahorras muchisimo, ejemplo si tuviese unos 5 subciclos dentro de mi proceso y cada evaluacion de collision tuviese 25 variedades de procesos para someterlos generaria mas de 200 lineas de codigo extras mientras que con el proceso reducirias eso a solo 30 lineas, tomando en cuenta de que si creas un proceso enemigo para colision debes tambien escribir el proceso a evaluarse en los 5 subciclos lo que seria tedioso, pienso que de esta manera puedes hacer algo mas amplio para los protagonistas sin tener que lidiar con los subciclos y sus eventos collision  8)


si quisiese hacer un protagonista tipo alucard de castlevania con un monton de movimientos especiales suponte como unos 10 subciclos a una variedad de 60 enemigos son 600 lineas para el proceso protagonista!! xD si ves lo que quiero evitar?? pero la idea del define estaria bien si nos muestras como u.u jummmm  ::)
Compiling code -- generating exe...

SplinterGU


#define control_colision() \
    if(collision(type objeto_enemigo))muerto=1;end; \
    if(collision(type objeto_enemigo2))muerto=1;end; \
    if(collision(type objeto_enemigo3))muerto=1;end;
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

fulgorelizz

 :o ahhhh ps si es asi ps creo que si sale mejor!!  ;D
Compiling code -- generating exe...

fulgorelizz

Quote from: SplinterGU on August 02, 2012, 07:34:02 PM

#define control_colision() \
    if(collision(type objeto_enemigo))muerto=1;end; \
    if(collision(type objeto_enemigo2))muerto=1;end; \
    if(collision(type objeto_enemigo3))muerto=1;end;


he probado unas cosillas con define y me viene de pelos!! .... usando esto se pueden depurar mucho los codigos, mi pregunta es la siguiente maestro :D , hay alguna cosita que deba tomar en cuenta si uso muchos defines??....

por ejemplo, #define MOVER_RIGHT joy_getaxis(0,0)>centro_x_joy

process miproceso()
begin

loop

if(MOVER_RIGHT)
x+=1;
end

frame;
end

END

estaria bien no??....

solo me gustaria saber si hay algun detalle que deba tener en cuenta  ::)
Compiling code -- generating exe...

KeoH

Yo creo q el mayor problema es q te pongas a hacer DEFINES como loco y despues se te olvide usarlos xDDD

SplinterGU

estaria bien, aunque CASI siempre es recomendable encerrar entre parentesis el contenido del define...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

fulgorelizz

jejejej bueno si, podria pasar que se nos olvide, pero creo que es una manera de trabajar muy limpia, tomare en cuenta lo de los parentesis partiendo de que son como expresiones que son leidas en lugar del nombre usado despues del define, o al menos asi lo entendi del manual.

#define expresion1 ((b+b)>c)

if(expresion1) es lo mismo que if(((b+b)>c)), pero con el define es mas depurable, suponiendo que esa condicion la use dentro de varios procesos a la hora de modificar solo reprogramaria un bloque de programacion y no esa gran cantidad
Compiling code -- generating exe...

SplinterGU

lo de los parentesis es para que sin darte cuenta luego no introduzcas externamente (cuando lo uses) algo que te afecte la expresion... lo mismo cuando uses argumentos dentro del define deben ir con parentesis...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

fulgorelizz

Compiling code -- generating exe...