Sólo 18 FPS en iPad (SOLUCIONADO)

Previous topic - Next topic

Hark0

#15
Para aclarar MÁS las cosas:

No es lo mismo esto:

Code (glbasic) Select

posx=0
posy=0
FOR y=0 TO BING_ALTO-1
FOR x=0 TO BING_ANCHO-1
[color=red]renderx=posicion_scrollx+posx
rendery=posicion_scrolly+posy[/color]
//recorte mapa
IF renderx>limitex_max AND renderx<limitex_min AND rendery>limitey_max AND rendery<limitey_min
IF BING_GRFX[x][y]>0 THEN DRAWANIM GRAFICOS_Bloque_Codigo,BING_GRFX[x][y],[color=red]renderx,rendery[/color]
IF BING_OBJETOS[x][y]>0 THEN DRAWANIM GRAFICOS_Objeto_Codigo,BING_OBJETOS[x][y],[color=red]renderx,rendery[/color]
IF BING_ENEMIGOS[x][y]>0 THEN DRAWANIM GRAFICOS_ENEMIGO_Codigo,BING_ENEMIGOS[x][y],[color=red]renderx,rendery[/color]
ENDIF
posx=posx+50
NEXT
posx=0
posy=posy+50
NEXT


Que ésto otro:

Code (glbasic) Select

posx=0
posy=0
FOR y=0 TO BING_ALTO-1
FOR x=0 TO BING_ANCHO-1
//recorte mapa
IF renderx>limitex_max AND renderx<limitex_min AND rendery>limitey_max AND rendery<limitey_min
IF BING_GRFX[x][y]>0 THEN DRAWANIM GRAFICOS_Bloque_Codigo,BING_GRFX[x][y],[color=red]posicion_scrollx+posx,posicion_scrolly+posy[/color]
IF BING_OBJETOS[x][y]>0 THEN DRAWANIM GRAFICOS_Objeto_Codigo,BING_OBJETOS[x][y],[color=red]posicion_scrollx+posx,posicion_scrolly+posy[/color]
IF BING_ENEMIGOS[x][y]>0 THEN DRAWANIM GRAFICOS_ENEMIGO_Codigo,BING_ENEMIGOS[x][y],[color=red]posicion_scrollx+posx,posicion_scrolly+posy[/color]
ENDIF
posx=posx+50
NEXT
posx=0
posy=posy+50
NEXT


El primero ES el loop rápido....  =D

Repasa tus loops @Alex_R  ;)
http://litiopixel.blogspot.com
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica Development Indie Videogames · Pixel-Art · Retrocomputing · Electronic

hardyx

Menuda optimización que has hecho!!! Las ordenes de dibujo de geometrías linea, rectángulo, van más lentas que dibujar un sprite o imagen preparada, ya que la mayoría de librerías gráficas están optimizadas para eso. Además, cuando dibujas una línea o un círculo se hace un cálculo por debajo, que se llama algoritmo de Bressenham (no me llaméis friki :D) para pintar los pixels de la línea.

Aqui puedes ver el algoritmo de Bressenham
http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
http://en.wikipedia.org/wiki/Bresenham%27s_circle_algorithm

msx

Enhorabuena hark0, seguro que todos saldremos beneficiados de tus investigaciones.


Alex_R

Mi problema de bajada de fps estaba en un iPod Touch que es el que uso para hacer pruebas. Tengo limitado el juego a 30 fps y siempre está en todos los niveles ahí salvo el de las nubes que bajaba drásticamente. Le he bajado el número de nubes de 30 a 10 y ahora va bien en el iPod Touch. Además, le he puesto alphamode 1 y se nota más rápido que con -1.

Por cierto que he hecho una prueba con un iPhone 4s con 50 nubes (con el iPod le tengo puesto 10 a la vez) y no hay reducción de fps. En cualquier caso esto es para deciros que las transparencias sí influyen en la velocidad y más con alphamode interpolado y con blending (claro, según mi experiencia)

Hark0

Quote from: Alex_R on 2012-Sep-21
Mi problema de bajada de fps estaba en un iPod Touch que es el que uso para hacer pruebas. Tengo limitado el juego a 30 fps y siempre está en todos los niveles ahí salvo el de las nubes que bajaba drásticamente. Le he bajado el número de nubes de 30 a 10 y ahora va bien en el iPod Touch. Además, le he puesto alphamode 1 y se nota más rápido que con -1.

Por cierto que he hecho una prueba con un iPhone 4s con 50 nubes (con el iPod le tengo puesto 10 a la vez) y no hay reducción de fps. En cualquier caso esto es para deciros que las transparencias sí influyen en la velocidad y más con alphamode interpolado y con blending (claro, según mi experiencia)

Hmmm quizás el tema de ALPHAMODE está en donde y cómo se use... en mi caso particular NO afecta ni un misero 0,1 ms.  :P
http://litiopixel.blogspot.com
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica Development Indie Videogames · Pixel-Art · Retrocomputing · Electronic

mentalthink

Personalmente el tema de los Alphamode como dice Alex si te pasas en el array puede dar quebraderos de cabeza, una cosa
es meter el Alphamode dentro del for para recorrer las cosas, pero si todos tienen la misma transparecias pues supongo que es mejor dejarlo antes del For:

Me alegro Hark0 que lo hayas arreglado, interesante lo que comentas que los drawline bajan los FPS, cosa que desconocia...

Hark0

Quote from: mentalthink on 2012-Sep-21
Personalmente el tema de los Alphamode como dice Alex si te pasas en el array puede dar quebraderos de cabeza, una cosa
es meter el Alphamode dentro del for para recorrer las cosas, pero si todos tienen la misma transparecias pues supongo que es mejor dejarlo antes del For:

Me alegro Hark0 que lo hayas arreglado, interesante lo que comentas que los drawline bajan los FPS, cosa que desconocia...

Como ya se ha comentado (frikimente  :D =D ;)) en el hilo, las rutinas gráficas suelen ser más lentas que volcar una surface imagen...

También, supongo yo, que se deberá a la tarjeta gráfica de la máquina en cuestión.... anteriormente programaba en un portátil HP DV4000 (tarjeta GM915, creo que este era el modelo). Pues bien, con esta tarjeta de vídeo NO podía usar funciones MEM2SPRITE ni silimares, ya que no soportaba estas historias (sorprendentemente corría todo tipo de apps/juegos sin problemas, léase el WOW).

En el equipo del despacho, con una tarjeta de vídeo Raedon HD6450, todo funciona de narices...

Pero lo bueno del asunto, es que el juego lo programo por las noches en casa, con un MacBook Pro, emulando con VMware... y NI UN PROBLEMA...

Lo recomendable sería, y como se ha comentado aquí, probarlo en diferentes máquinas y/o configuraciones.
http://litiopixel.blogspot.com
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica Development Indie Videogames · Pixel-Art · Retrocomputing · Electronic

Hark0

Pego aquí el código que utilizo para cálcular el tiempo de render por pantalla:

Code (glbasic) Select

...
... inicio de loop con for o lo que sea
...
Tiempo_Render=GETTIMERALL()
Tiempo_Render_FIN=0
....
.... loop render / cálculos de lo que sea
....
Tiempo_Render_FIN=GETTIMERALL()-Tiempo_Render
PRINT Tiempo_Render_FIN,0,0
SHOWSCREEN
....
.... fin del loop
....


No es nada complicado como se puede ver, pero si nos da información sobre el timming de nuestras rutinas. Además se puede meter de forma muy sencilla en cualquier LOOP para ver su tiempo de cálculo.

Espero que os sirva.  ;)
http://litiopixel.blogspot.com
litiopixel.blogspot.com - Desarrollo videojuegos Indie · Pixel-Art · Retroinformática · Electrónica Development Indie Videogames · Pixel-Art · Retrocomputing · Electronic