Efecto Lupa?

Started by Hokutoy, May 21, 2010, 10:42:16 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BoMbErLiNk

Hokutoy dime si es así como esperas el efecto y te lo acabo de retocar, necesito un poco de más info.
Si es zoom dinamico o estatico como el que te he puesto de ejemplo
Si hay scroll o son pantallas estaticas, o se queda la pantalla estatica cuando usas el zoom y si hay varias capas
Que tipo de control de enemigos hay en pantalla, cuantos hay, porque se puede usar una forma sencilla de representarlos en la lupa

http://bombergames.net/lupa.zip

FreeYourMind

Y es a mi que me riñen por no poner el prg  ;D

La momia que fuma

Bomber, eres un crack, macho! :P

Sobre lo de get_screen y que te saque cosas que no debes, creo que las puedes ocultar "fuera de frame" y no salen en la captura, es decir, le pones a (por ejemplo) un marcardor de lo que sea (que no quieres incluir en el zoom) gráfico 0 o alpha 0 antes del get_screen y luego lo dejas como estaba, y no sale en la captura.

Si no funciona, creo que puedes "engañar" a Bennu con un frame(0) por el medio, pero no me acuerdo si era realmente necesario.

No lo he probado muy a fondo, pero con las tonterias que hice en su dia, sin hacer esto con el propio gráfico del zoom (que era a pantalla completa) se autocapturaba en la misma imagen siempre si mal no recuerdo.

Es importante también hacerle un unload a cada captura de get_screen, si no te los va metiendo en el fpg 0 y acabas petando la memoria tontamente a base de capturas de pantalla xD

SplinterGU

como ya se hablo en su momento ( estamos muy retro ultimamente :D ), la nueva funcion get_screen devuelve el ultimo frame dibujado y no el actual.

por que esto? por varios motivos:

1) velocidad
2) problemas con el algoritmo que existia para capturar, ya que no solo capturaba pantalla actual, sino que tambien avanzaba timers, modificaba variables de contexto de ultima posicion y areas modificadas (dirty), tambien consumia secuencias en un fade y otras tantas cosas mas que se hacen al final de un frame, pero no deberian hacerse en un capture. Este es el mas importante y grave de los motivos por el cual la implementacion heredada de fenix del getscreen funcionaba mal y se quito. Mas adelante pienso agregar algun parametro a la funcion getscreen para elegir entre un metodo u otro, pero no es de momento una prioridad ni tampoco sera resuelto a la brevedad, porque implica cambios por muchos lugares.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

get_screen no existia en Bennu no ? Si ahora existe en que versión se ha implementado ?

Hokutoy

#20
Perdon Bomber por la tardanza... vengo de un viaje largo fuera de casa.

Mi idea es hacer algo así como el Silent Scope:



Pantalla normal + mirilla con zoom y scroll... aunque si me resulta muy dificil imagino que intentaré cambiar la idea para adaptarlo mejor.


EDIT: Acabo de ver el ejemplo que has puesto y es justo lo que quería... joer tío eres un hacha.
Gracias!
Voy a toquetearlo un poco a ver que saco jejeje

No lo he mirado bien pero si la lupa capta un proceso "enemigo" en movimiento este tambien es aumentado?
Y si el fondo tiene un scroll... tambien funciona el aumento?
Bueno esta noche al llegar a casa lo pruebo a ver... gracias man!

BoMbErLiNk

Vale, con esta info ya puedo montar uno más concreto, luego más tarde subo el código que primero toca ver el E3 :)

Hokutoy


BoMbErLiNk

Aquí lo tienes :
http://bombergames.net/lupaV2.zip

Este test es más lento porque el otro copiaba simplemente el mapa en la lupa, este tiene el sistema entero montado, sin embargo funciona entre 110 / 130 fps en Wiz sin overclock, tiene unas cuantas cosas optimizadas, otras no, como que este diseñado para efectos a pantalla completa (se trabaja sobre un mapa de la pantalla, en lugar del tamaño lupa), pero eso ya lo dejo para quien quiera tocar el código.

Lo que hace es generar un mapa y ir pintando la escena en el, para finalmente ser visualizado por la lupa.

Te he puesto variables para manejer 2 planos de scroll, pero podría soportar más, como no se que sistema usas, tendras que probar como setearlas para que coja bien la posición, lo que hace es siempre acceder directamente al mapa, si mod_scroll te los recoloca de posición tendras que añadirle ese cambio.

Soporta procesos pintados en él, con control absoluto, la lupa puede pasar por otros procesos como textos o barras de vida sin que estas se vean afectadas, pero tienes que copiar unas cuantas lineas de código que veras en el proceso pajaros en el resto que se vayan a usar.

Hay una variable zoom para elegir el aumento de la lupa, es a precisión de 2x, 3x, etc

Hay un modo debug, se activa poniendo debugx=2, con el veras la imagen real que se va a generar a traves de la lupa, para testear escenas, etc

SplinterGU

no lo vi aun, pero por lo que cuestas te lo recurraste bomber, ya te di karma.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

yo lo modificaria un poquito, agregar un par de locales:

- zoom_number, donde los valores son de 0 a N, e indican en que zoom seran dibujados, 0 es en todos los zoom, -1 dice que este proceso no se se dibuja en ningun zoom (esto puede ser para el caso de querer hacer varios zoom o lupas.
- zoom_graphs[N], array de graficos para cada ampliacion de zoom para el grafico actual, y donde es la cantidad de ampliacion de zooms permitidos, esto nos permite tener mejor calidad de detalle en el zoom. Este array hay que actualizarlo cada vez que se cambia el grafico, puede ser un puntero que apunte a diferentes array previamente definidos. Esta variable seria opcional y solo si se quiere dar mejor definicion al sistema, sino se obvia y se trabaja con el size normal.

algunas estructuras globales

struct zoom_info[10] /* 10 zoom/lupas/miras por ejemplo */
    zoom_file;
    zoom_graph; /* 0 es no zoom, otros valores es el grafico que usa para hacer el zoom */
    zoom_multipler; /* donde indica el factor de zoom actual, 1x, 2x, 3x, etc */
end

La logica

- el tamaño del bitmap de la lupa tiene que ser del tamaño de la lupa y no de toda la pantalla (esto nos permite ganar rendimiento ya que solo dibuja lo que entra en el grafico y lo que queda fuera no se dibuja)

- luego meter un proceso controlador (llamado lupa o zoom) que revisa todos los procesos existentes y considera aquellos que zoom_number es diferente de -1, y toma de los procesos, las coordenadas, el angulo, los graficos, los flags, el size, etc. Dibuja en el zoom que corresponde y lo pone en pantalla. De esta forma uno se despreocupa de dibujar en cada proceso.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

BoMbErLiNk

Guay, si alguien quiere seguir con ello o perfeccionarlo adelante, yo lo haría pero no tengo tiempo con el resto de proyectos  :D

FreeYourMind

Venga, te doy mi karma por el pequeño pero potente código que has soltado  ;D

SplinterGU

Quote from: BoMbErLiNk on June 16, 2010, 05:42:24 PM
Guay, si alguien quiere seguir con ello o perfeccionarlo adelante, yo lo haría pero no tengo tiempo con el resto de proyectos  :D

si, estaria bueno que alguien meta esos cambios que propuse y quedaria algo generico, como un mod_scroll pero escrito en bennu.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Hokutoy

Gracias Bomber te ha quedado de lujo!
Karma ++

Ya publicaré alguna cosa usando el "motor".

Gracias!