Preguntas sobre programacion de Hokutoy.

Started by Hokutoy, February 02, 2010, 04:44:57 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Hokutoy

#75
Quote from: FreeYourMind on March 25, 2010, 05:17:07 PM
Si los haces manuales y no utilizas los del sistema, vas a ganar rendimiento.

Como se hacen scrolls manuales? Cada capa es un proceso con un graph gigante (320×240) y mueves sus x e y?
Y para que al llegar al final salga otra vez el principio? Uso un scroll infinito/continuo multidirecional.

Imagino que el triple scroll no es el problema... es la gota que colma el vaso. De hecho la caída de rendimiento se nota cuando la nave dispara... pero es que cada bala es independiente y se crean/destruyen muchos procesos bala de forma continuada y aunque estos no chequean nada los enemigos si que chequean la colision con ellas.

Saludos!


BoMbErLiNk

El tema de los fps en Wiz es complicado, la SDL tiene un problemilla de precisión.

Si pones 60,2, te va a hacer un frameskip de 2 siempre.
Si pones 60,1 te va a hacer un frameskip de 1 siempre.
Tienes que dejarlo en 60,0 y para que se mantenga "estable" tiene que conseguir llegar por lo menos a los 120 fps en un set fps 0,0.

Digamos que tu juego va con set fps 0,0 a 90 fps, el juego con set fps 60,0 te va a ir a 55fps (aunque el rendimiento llegue de sobras para ponerlo a 60), ahora baja a 70 fps, el juego se te va a poner a 45fps y así ..

Hokutoy

Quote from: BoMbErLiNk on March 25, 2010, 07:33:30 PM
El tema de los fps en Wiz es complicado, la SDL tiene un problemilla de precisión.

Si pones 60,2, te va a hacer un frameskip de 2 siempre.
Si pones 60,1 te va a hacer un frameskip de 1 siempre.
Tienes que dejarlo en 60,0 y para que se mantenga "estable" tiene que conseguir llegar por lo menos a los 120 fps en un set fps 0,0.

Digamos que tu juego va con set fps 0,0 a 90 fps, el juego con set fps 60,0 te va a ir a 55fps (aunque el rendimiento llegue de sobras para ponerlo a 60), ahora baja a 70 fps, el juego se te va a poner a 45fps y así ..

Juer pues vaya mojon... eso explica muchas cosas.
Y no hay manera de arreglarlo?
Entonces al crear un juego que piensas que ira "cargadito" es mejor setearlo a un framerate de 50 o 30 pa asegurarte una estabilidad u que?

Gracias!

FreeYourMind

Nadie mejor que Bomber para explicarte lo de los scrolls, que los lleva implementando toda su vida :)

BoMbErLiNk

Splinter me comento que se podría hacer de otra forma lo de los ticks, habra que esperar nuevas versiones de Bennu  :) Yo por lo pronto sigo trabajando a 60,0 hasta que se arregle el problema.

Cada bala que disparas genera un sonido ? A mi me pasaba exactamente eso, caia el rendimiento al usar la ametralladora y luego era porque se ahogaba reproduciendo los canales de sonido acumulados.. (no los lanzaba todos por el mismo canal) :P

El scroll va a ser siempre así con fondo negro ? Yo creo que para el de atras de todo si que te vendría mejor procesos, para las pocas estrellas que veo incluso sería mejor pintando el punto directamente que haciendo una especie de scroll manual con 4 imagenes

SplinterGU

hay que ver si es posible, no afirme nada...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

El sonido es todo un mundo... Si tienes un proceso que lanza un sonido de una bala por FRAME y vas a 60 fps estás sacando 60 sonidos por segundo... Si cada sonido dura más de un segundo llegas a tener cientos de sonidos activos al mismo tiempo...

Lo he mirado alguna vez pero nunca he profundizado demasiado en el IMPORTANTE tema del sonido. En su día eché de menos una forma sencilla de reservar canales... Es posible hacerlo, pero supone bastantes lineas de código, se hace necesario tener un módulo de código separado para gestionar todo el tema del sonido.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Hokutoy

Bueno el juego aún no tiene sonido alguno... de ahí mi preocupación jejeje
Es una lastima lo del frameskip ojalà se pueda solucionar algún día.

Saludos!

Drumpi

Yo no he tenido todavía que lidiar con SFX más allá del último concurso, pero si que he notado las limitaciones en Fenix con FrikiMusic: 8 wavs a la vez, no más... al menos en GP2X. Se podían hacer acordes de 4 notas con la guitarra, y repetirlo, pero no se podía tocar ninguna nota más hasta que se hubiera extinguido al menos una de las anteriores.
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)

Hokutoy

Sigamos con las dudas... esta vez dudas con los sonidos (sfx) ya que hablais de ellos jejeje
Me he leído el wiki y entiendo que hay 16 canales para sfx y todo eso pero tengo el siguiente problema:

* Cuando una bala impacta a un enemigo esta hace un ruido de impacto play_wav(SFX_IMPACTO,0);
* Cuando el enemigo muere se oye una explosion play_wav(SFX_EXPLOSION,0);

El tema es que como generalmente los 16 canales para sfx estan ocupados reproduciendo los impactos de balas (que hay muchos y continuos) hay algunas veces (noticiable) que el sonido de la Explosion no se oye (no se reproduce).

Hay alguna manera (os juro que lo he intentado) para reservar por ejemplo, 8 canales de audio para los impactos y reservar 2 canales de audio solo para las explosiones... para asegurarse de que siempre suene la explosion.

Alguien me puede dejar algo de codigo de como sería ese gestor de canales?


Gracias!

BoMbErLiNk

#85
Para lo que comentas hay :
play_wav(sonido,repeticion,canal);

Si lanzas todos los disparos por el canal 0 ya esta el problema resuelto.

Si quieres que el sonido se gestione automaticamente no añadas el tercer parametro, o pon -1.

Drumpi

Si, pero creo que antes hay que hacer un reserve_channels ¿no?
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)

BoMbErLiNk

Bueno eso depende de los canales que vayas a usar manualmente, en Fenix eran 8 canales por defecto, del 0 al 7 si vas a usar uno de ellos no es necesario, en Bennu nose, pero yo siempre reservo 24 canales que son los que uso.

Hokutoy

#88
Juer ahora el juego me peta en wiz y no veo el porque... algún cambio que habré hecho.
Lo he preguntado ya varias veces pero nunca me acuerdo...

Uso el siguiente *.gpe para cargar el juego:

#!/bin/sh

./pollux_set 'lcd_timings=397,1,37,277,341,0,17,337;dpc_clkdiv0=9;cpuclk=750;ram_timings=2,9,4,1,1,1,1';
#!/bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime

echo 2 > /proc/cpu/alignment

for prg in *.prg; do
    name=`basename $prg .prg`
    bgdc $prg
    bgdi $name
done

cd /usr/gp2x
exec /usr/gp2x/gp2xmenu


Alguien me añade lo que hace falta para que se generen los archivos sterr.txt y stdout.txt en la wiz y ver porque peta? Gracias!

No me digais el cacho de linea que tengo que poner... integrarlo en mi *.gpe para que funcione.

Muchas gracias!

Palabrita que es la ultima vez que lo pregunto... XD

BoMbErLiNk

#89
Tenias mal la cabecera, he visto 2 veces #!/bin/sh, si estas usando el último firmware no necesitas pasarle los timings lcd en el pollux_set porque a mi me han parecido peores que los que ahora trae por defecto, aunque eso puedes ponerlo como veas  :), he añadido sync en el final del código porque se aconseja también ponerlo.

Quote
#!/bin/sh
./pollux_set 'cpuclk=750;ram_timings=2,9,4,1,1,1,1'
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:../bgd-runtime
PATH=$PATH:../bgd-runtime

echo 2 > /proc/cpu/alignment

for prg in *.prg; do
   name=`basename $prg .prg`
   bgdc $prg
   bgdi $name
done

sync
cd /usr/gp2x
exec /usr/gp2x/gp2xmenu

A ver si te funciona así  :)