Ver la versión completa : Optimizacion en Fenix
A ver si alguien me puede ayudar...
Estoy haciendo un jueguecillo en fenix para la GP.
Lo que me ocurre es que al probarlo en la consola, el juego da tirones de vez en cuando y no va todo lo fluido que debiera.
La cosa es que el jueguecito no tiene muy muchos procesos (no pasa de 20-25) a la vez en pantalla.
He visto juegos hechos por la gente y algunos están bastante mas cargaditos de procesos que el mio y van muy bien en la GP.
Lo dicho. Me gustaría que algun experto programador en Fenix me aconseje sobre como optimizar el código (que sentencias usar y cuales no) y sobre cuantos archivos usar y su tamaño. (Yo uso un .fpg y tanto musica como sonidos en wav).
A cuidarse.
Hay funciones que se comen mucho procesador: Los reescaslados, las rotaciones y los scrolls son los que más. ¿Tu juego abusa de ellos?
Con los reescalados te refires a SIZE, verdad??
los he eliminado todos (tenia algunos).
Rotaciones no uso.
En cuanto al scroll uso un "triste" fondo de estrellas que se repite en vertical.
(Es un juego tipico de naves).
Sigue sin ir fluido del todo.
Por si te sirve de ayuda, una de las cosas que me pasan es que justo antes de coger un power-up se para unos instantes el juego (unos 5 seg), suena el sonido que he puesto para cuando se coge un power-up y continua.
Solo me pasa con el primer power-up que cojo y con los de un tipo determinado (los que me ponen un escudo giratorio alrededor).
Ya puestos, me gustaria acelerar la velocidad del scroll en determinados momentos del juego.
Sabeis como hacerlo???? :chupete:
Por un casual ¿el sonido se carga cada vez que se ejecuta el proceso?; es que sain ver el código tampoco te puedo decir mucho más.
Para hacer el scroll no utilices la funcion "Start_scroll" utiliza un par de procesos que tengan un gráfico del tamaño de la pantalla; y que cuando salgan por debajo se vayan otra vez a arriba del todo
la funcion de Start_scroll de fenix es muy truñera... gasta muchos recursos y a mi parecer no se ve bien... :S Es mejor hacerte un scroll propio tal y como dice chipan
*****, sois unos craks en esto del Fenix...
Probare lo del scroll a ver si se reduce la carga.
En cuanto a lo de los powers-up, cargo el sonido en el proceso principal no cada vez que ejecuto el proceso.
Puedo poner el codigo aqui pero es un poco largo.
Si kereis adjunto el programa.
De todas formas solo me pasa al coger el power-up te tipo escudo.
El proceso para este power-up es:
//Coloca un escudo alrededor de la nave
Process escudo()
Private
distancia=40; //distancia la que esta de la nave
vida=100; //vida del escudo
Begin
graph = 7;
//debugMode
If (debug_mode == 1)
nprocesos++;
nescudos++;
End
Repeat
angle+=2000;
advance(12);
x=id_nave.x+get_distx(angle,distancia);
y=id_nave.y+get_disty(angle,distancia);
Frame;
Until (vida < 0)
//debugMode
If (debug_mode == 1)
nprocesos--;
nescudos--;
End
End //escudo
//================================================== ==
Ya que lo habeis visto, como podria aumentarle la velocidad de giro???
Gracias por adelantado.
Sino recuerdo mal, con el port del fenix a la GP32 siempre que se usa el comando x_advance (o lo que sea_advance) por primera vez en un proceso el juego se para unos segundos y luego continúa. Esto solo pasa la primera vez.
Parece ser que es un bug del port.
Byes
Segata Sanshiro
22/03/2005, 18:16
Sino recuerdo mal, con el port del fenix a la GP32 siempre que se usa el comando x_advance (o lo que sea_advance) por primera vez en un proceso el juego se para unos segundos y luego continúa. Esto solo pasa la primera vez.
Parece ser que es un bug del port.
Byes
Ah, pues ahora que lo dices, tienes toda la razón del mundo.
Otra cosa que consume tiempo de proceso por un tubo son las colisiones, pero eso muchas veces es inevitable...
chemaris
22/03/2005, 18:32
Gracias Hokutoy no sabia de ese "bug" ya se porque se me bloque el cursor durante unos seg al empezar el nivel de los indios yo rallandome ya que en el pc iba genial y va a ser eso ya que los indios usan x_advance para ir por el rail
OscarBraindeaD
22/03/2005, 18:37
Hola, algunas cosas que pueden hacer mejorar la velocidad en fénix:
-Ponle siempre, al inicio del programa, set_fps(frames por segundo, skip). ésto hará que no de tantos saltos; prueba con distintos framerates (24 por ejemplo, si no lo petas de procesos, está bien)
-Evita poner procesos con transparencias (flags 4)
-Procura usar el modo de 256 colores
-Si puedes, usa una resolución menor (por ejemplo 320x200), recuerda ponerle full_screen = 1
-Si un proceso se sale de la pantalla y ya no es necesario, elimínalo
A mí el advance y los scrolles, no me han dado problemas... nu sé...
Espero que te sirva
Salud
yo nunca uso advance... prefiero usar movimiento por vectores y sus componentes. Claro que para un circulo es algo más jodido :S Siempre puedes usar la formula de la circumferencia xD
Segata Sanshiro
22/03/2005, 21:59
yo nunca uso advance... prefiero usar movimiento por vectores y sus componentes. Claro que para un circulo es algo más jodido :S Siempre puedes usar la formula de la circunferencia xD
Y usas senos y cosenos? Se tardan mucho en calcular?
si, uso senos y cosenos. La verdad es que no se tardan mucho a calcular, almenos en las pruebas que he echo me van bien. Claro que no lo he puesto nunca en ningun juego. De todos modos puedes precalcularte todos los senos y cosenos que necesites para angulos del 1r quadrante y los otros por reduccion al 1r quadrante (cos120=-cos60) o aproximando (32000 a 30000 por ejemplo).
Segata Sanshiro
22/03/2005, 22:18
si, uso senos y cosenos. La verdad es que no se tardan mucho a calcular, almenos en las pruebas que he echo me van bien. Claro que no lo he puesto nunca en ningun juego. De todos modos puedes precalcularte todos los senos y cosenos que necesites para angulos del 1r quadrante y los otros por reduccion al 1r quadrante (cos120=-cos60) o aproximando (32000 a 30000 por ejemplo).
Vaya pues gracias por el consejo, más que nada por que yo no tengo nada de imaginación. Supongo que los precalcularé y los guardaré en una tabla.
Bueno pos he tocado unas cosillas y he cambiado lo del scroll.
Ahora me va bastante mas fluido (unos 18-20 fps).
Sigue quedandose parado al tocar el primer power-up escudo.
Tambien me he dao cuenta que baja el rendimiento cuando dispara la nave.
Los disparos que se salen fuera de la pantalla los mato (he programao un debug mode que me indica todo eso). Ademas cuando para de disparar vuelven a subir los fps.
Es curioso pq por muchos enemigos que ponga en pantalla (como estoy probando el rendimiento he puesto bastantes) el rendimiento apenas baja.
Sin embargo, los disparos y los powers-ups se comen toooo...
En fin, seguire mirando.
Gracias a todos por responder y gracias a CHIPAN por lo del scroll (antes me iba a 11-14 fps con star_scroll).
Por cierto, para solucionar lo del scrool yo he hecho esto:
Process miScrollabajo(graph)
Begin
z=500;
x=160;
y=120;
Loop
y += 7;
If (y>358)
y=120;
End
Frame;
End //loop
End//Scroll abajo
Process miScrollarriba(graph)
Begin
z=500;
x=160;
y=-120;
Loop
y += 7;
If (y>118)
y=-120;
End
Frame;
End //loop
End//Scroll arriba
//=============================
alguna pega/correccion ????
Gracias a todos.
A cuidarse
Si funciona como tu querías, ninguna pega.
Ummmm no se si esto deberia estar en un hilo nuevo.
Yo lo pongo y si es necesario pos luego lo cambio, ok???
Una duda sencilla:
Como hago procesos iterativos en Fenix????
Es decir, que se ejecuten uno detras de otro( no de forma concurrente).
Lo necesitaria (por ejemplo) para ir poniendo los enemigos en cada fase.
Pej: Fase1
- 3 enemigos tipo 1
- 4 enemigos tipo 6
- Asteroides
....
- Boss fin de fase
Me explico???
Yo kiero q los enemigos tipo 6 no salgan hasta que los de tipo 1 esten muertos o desaparecidos.
A cuidarse
Un proceso que se ejecute en 2º plano
Una variable int o byte (por ej. n_enemigos)
Que cada enemigo al aparecer le sume 1 a esa variable y al morir se lo reste;
Cada vez que la variable sea 0 que aparezca una nueva horda.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.