FPS Dinamicos en BennuGD

Started by JaViS, August 26, 2018, 04:35:35 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

panreyes

El problema de skill y let_me_alone para cosas como ésta, lo he resuelto con una local llamada "unkillable" y una let_me_alone a medida, que sólo elimine los procesos que tengan unkillable a 0. Aparte de que luego utilizo otra local, llamada action, en la que casi siempre el -1 significa que el proceso debe cerrarse por sí mismo.

Arcontus

#31
Panreyes, Muy bien pensado, la verdad.Javis, bien que no le afecten los kill, pero molaría más que funcionara como el setfps(), independiente a los procesos, aun que entiendo que si esto fuera fácil de hacer ya lo habrías hecho.
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

JaViS

pues si, queria comentarles que sigo trabajando en la funcion y pronto habrá mas novedades :)
Working on Anarkade. A couch multiplayer 2D shooter.

Drumpi

Hola a todos:
Sí, hace tiempo que no me paso por aquí ^^U Pero ya lo comenté, el trabajo me tiene sin ganas de programar al llegar a casa.

No obstante tengo que aplaudir la idea de Javis. Es cuanto menos original e interesante. Ya lo de elegante o no, no sé qué decir porque, claro, es elegante en el ámbito en que no hay que tocar nada del resto del código, pero un poco chapuzas porque está triplicando el espacio de memoria de los procesos dedicados a posicionamiento y demás :D
Aun así, es una muy buena solución para el programador medio de Bennu, y cualquier DivLike en general.

Lo que no alcanza a comprender Splinter es que, a diferencia del frameskip, se pueden tener más frames que los que se han especificado originalmente: tu indicas los FPS a los que andaba el juego inicialmente, y él te interpola el juego para que funcione al máximo número de frames que soporte la máquina. Es como poner un set_fps(1000,1000), pero sin que el juego vaya nunca a una velocidad diferente para la que fue diseñado.

De todas formas, a mi me plantea algunas dudas, que, en estos momentos, no puedo llegar a explicar (estoy trabajando, y escribo mientras compila el programa :D). Por ejemplo, si la animación del prota depende del número de frames entre imagen e imagen ¿eso se puede controlar? ¿Y otras cosas que dependan del tiempo, es decir, del número de frames?

Aparte de eso, yo siempre he desaconsejado el uso de let_me_alone y de las señales *_tree para todo el árbol de ejecución (en todo caso para un proceso tipo prota, y todos sus hijos, como accesorios, armas, control..., o para un enemigo, o escuadrón...). Es mejor que se controlen los tipos de procesos generados desde un proceso de control.
Por ejemplo, yo siempre tengo una función para enviar señales a los procesos del juego, en el que manda esa señal individualmente a todos los procesos prota, enemigo1, enemigo2, objeto1... y así con todos los procesos que intervienen en la parte jugable... A veces son más de una función, para tener grupos de procesos, porque me puede interesar congelar a los enemigos, pero no al prota, o a ambos, pero no a los items del juego.
Es un peñazo porque el proceso es muy largo de escribir y tienes que estar muy atento cuando creas un nuevo proceso, porque es muy susceptible a olvidos, pero el control total es imprescindible en programación.

Dicho lo cual, me vuelvo a mi cueva :D
Ya sabéis que tengo Telegram, por si queréis contactar conmigo :P
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)

panreyes

Drumpi, no sabes lo que te pierdes por no estar en el Discord xD

JaViS


Hola Drumpi! gracias por el mensaje!!


paso a responder algunas de tus dudas!


> si la animación del prota depende del número de frames entre imagen e imagen ¿eso se puede controlar?


la pregunta es, como estas contando los frames? La interpolacion se hace dentro de una función aparte que no deberia tocar ninguna variable tuya.


> ¿Y otras cosas que dependan del tiempo, es decir, del número de frames?


Si controlas con TIMER, por ejemplo, no deberia verse afectada, porque la interpolacion respeta la velocidad original del juego. Con respecto al numero de frame, me quedo con la duda de como los contas. Hasta donde yo se, no existe un contador general de frames en Bennu.


> Aparte de eso, yo siempre he desaconsejado el uso de let_me_alone y de las señales *_tree para todo el árbol de ejecución (en todo caso para un proceso tipo prota, y todos sus hijos, como accesorios, armas, control..., o para un enemigo, o escuadrón...). Es mejor que se controlen los tipos de procesos generados desde un proceso de control.
Por ejemplo, yo siempre tengo una función para enviar señales a los procesos del juego...


Si, yo tengo funciones especiales tambien para ese trabajo.


Si te interesa probarlo avisame y actualizo la version en el framework. Ademas de hacer algunas mejoras le cambié el nombre a "interpolated_fps" porque es mas descriptivo de lo que hace
Working on Anarkade. A couch multiplayer 2D shooter.

Drumpi

Yo me refiero a que, por ejemplo, yo tengo un código similar a este para controlar las animaciones:


//Bloque de animaciones
cont_anim++;
if (cont_anim >= 4)
    cont_anim = 0;
    if (graph < 8) graph++; else graph = 1; end
end


Y como eso, varias cosas controladas mediante contadores, que están fuertemente ligados a los frames.
Supongo que tendría que crear unas variables en tu código, como has hecho con X, Size y demás, para controlar esto.
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)

JaViS

Eso va a andar bien, no te preocupes :)

Working on Anarkade. A couch multiplayer 2D shooter.

panreyes

No me importaría tener algo así integrado directamente en el engine :D

Por cierto Javis, ¿también se interpolan las posiciones de los scrolls?

JaViS

Si :) el scroll también se interpola
Working on Anarkade. A couch multiplayer 2D shooter.

Drumpi

Genial, gracias, Javis ;)
Karma++, que te lo has ganado, que hace eones que no pongo uno :D
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)

SplinterGU

no se por que desaconsejan funciones let_me_alone y señales tree... quisiera argumentos...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JaViS

Yo en particular tengo mi propia funcion para respetar el estado que el proceso tenia antes de dormirlo y despertarlo de vuelta. asi la interpolacion respeta el codigo y su funcionalidad original.


@drumpi muchas gracias! hoy voy a actualizar el repo asi tienes la ultima version. 


Saludos!
Working on Anarkade. A couch multiplayer 2D shooter.

Drumpi

Quote from: SplinterGU on June 10, 2019, 02:29:04 PM
no se por que desaconsejan funciones let_me_alone y señales tree... quisiera argumentos...

Por buenas prácticas:
Si usas let_me_alone o un kill_tree, ciertamente eliminas todos los procesos referentes a la ejecución de algo (un nivel, una pantalla, etc...) pero he comprobado que si haces eso, en muchos casos puedes cerrar procesos que no te conviene cerrar (control de teclado, control de sonido...) o que si cerrases como debe ser, verías que tienes un proceso o dos que no has guardado su ID.
No sería la primera vez que, después de cerrar un nivel, se me ha quedado algún proceso de objeto vivo y se ha generado otro al volver a entrar al nivel, con el consiguiente problema de, yo que se, tener a los enemigos que no saben cuál proteger.

Básicamente, para obligar al programador a llevar un control absoluto de qué procesos se crean y cuáles se destruyen.
Aparte que, salvo salir del juego, no le veo uso práctico al let_me_alone.

Por otro lado, está el tema de los recursos: si son los propios procesos los encargados de gestionar los gráficos, música, punteros, etc que se cargan y descargan, hacer que desaparezcan desde fuera puede provocar que dichos recursos no se liberen correctamente.

Por eso desaconsejo su uso... hasta que se tenga un muy buen dominio del tema de los procesos y de la gestión de recursos, pero mientras se sea un novato, mejor que se aprenda a llevarlo todo bajo control desde el primer minuto. Luego ya se usará el onexit y demás herramientas :D
Lo digo por experiencia propia :P
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)

JaViS

Actualizada libreria, ahora se usa del siguiente modo






include "../library/interpolated_fps.inc";


Process Main()
Begin   
    //set_fps(30,0);
    interpolated_fps(30, 120); // arguments: original FPS, max fps (0 = unlocked)
End   
Working on Anarkade. A couch multiplayer 2D shooter.