;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)
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 :)
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.
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 ::)
#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;
:o ahhhh ps si es asi ps creo que si sale mejor!! ;D
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 ::)
Yo creo q el mayor problema es q te pongas a hacer DEFINES como loco y despues se te olvide usarlos xDDD
estaria bien, aunque CASI siempre es recomendable encerrar entre parentesis el contenido del define...
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
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...
asi es Splinter 8)