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.

Hokutoy

Buenas!
Ayer estaba jugando un rato al típico juego flash de los snipers donde haciendo zoom sobre un escenario te dedicabas a hacer headshots y me surgió la duda...
Si quisiera hacer un minijuego en Bennu de ese estilo como se tenfría que hacer el efecto zoom de la mirilla para que agrandase lo que se viera por ella (Background + procesos de enemigos o parte de ellos)?
Me suena a ver visto hace tiempo un ejemplo de algo parecido... pero no lo encuentro.
Hay alguna manera "facil" de hacerlo? O cúal sería su logica (duplicar el tamaño a nivel de pixel o algo así?)

Gracias!

La momia que fuma

Había hecho algún experimento en su dia con eso...a ver de memoria que te se decir (Porque el codigo a saber donde lo metí)

Basicamente es cosa de usar map_xput y usando el parametro size para agrandarlo pegarlo todo en el grafico de la lupa...con un poco de arte en las coordenadas que metas haras zoom en la zona que quieras, lo que no quepa en el grafico de la lupa ya queda descartado automaticamente.

En mis pruebas simplemente hacía map_xput del grafico del fondo de pantalla, pero claro, eso no valdría para capturar una pantalla real con sus sprites, scrolls, etc, pero con get_screen supongo que se podría hacer...(Ten en cuenta que debes ocultar "fuera de frame" antes del get_screen cosas que no quieras que salgan en el zoom, como marcadores, o la propia lupa, por ejemplo)

Lo que ya no supe hacer es quitarle la forma cuadrada a la lupa (Quizá un for que recorra el grafico poniendole pixels transparentes, pero quiza sería muy lento...)

Drumpi

Hombre, flash tiene la ventaja de usar gráficos vectoriales, por lo que hacer un zoom no afecta (demasiado) a la calidad gráfica. En bennu sólo contamos con size y eso va a pixelar mucho la imagen, deberías poder contar con los mismos gráficos en dos tamaños o aplicar size a los que se ven en el juego normal para reducirlos.
Luego podrías usar regiones para trabajar con ello, pero dado que la mirilla no es cuadrada puede que haya problemas, y la mejor solución pasase por montarse un sistema com map_put_pixel... o algo si va s ausar varios procesos.
Lo cierto es que es una cosa peliaguda, el tema de regiones no cuadradas (usando máscaras o no) es un tema sobre el que ya de ha debatido y para el que, de momento, no hay más solución que ingeniárselas con lo que hay :(

PD: bueno, Momia medio se me ha adelantado ^^U
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

get_screen es el ultimo frame dibujado... sera un problema eso...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

BoMbErLiNk

Aquí hay un ejemplo para hacer que la lupa sea circular :
http://forum.divsite.net/viewthread.php?tid=6248

Aunque creo que tomaba mucha cpu.  :P

SplinterGU

si, esa version tomaba mucha CPU, pero yo habia hecho una que le pase a theosk, que ocupaba muy, pero muy poca CPU.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Hokutoy

Me interesa. Alguna manera de recuperar el codigo?
Si a las buenas no puedo conseguir el efecto que quiero siempre puedo usar el "plan B"... al darle al boton del sniper hacer un zoom global a toda la pantalla y tapa la parte no visible con fondo negro menos la mirilla.
Lo malo... WIZ + sizes = problemas de rendimiento casi siempre.

Splinter, te pregunto desde la ignorancia, se puede hacer algo, a nivel tuyo, para poder mejorar mas aun el port de Bennu a Wiz  para conseguir mas rendimiento/frames en la wiz? Es una jodienda que el frameskip no fuincione como deba... sniff

Saludos

SplinterGU

a que te referis con que el frameskip no funciona?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

BoMbErLiNk

El otro dia hice una especie de " camuflaje óptico " :

(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.

Hokutoy

Quote from: BoMbErLiNk on June 11, 2010, 01:18:12 PM
El otro dia hice una especie de " camuflaje óptico " :

(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.

Eso es exactamente lo que necesito... gracias por compartir!

Splinter lo del fameskrip en la wiz es algo muy raro... quizá alguien puede arrojar algo mas de luz sobre esto pero a mi me parece que si pones un frameskip de 3 siempre te hace el frameskip 3 aunque el rendimiento en esa parte del programa de para usar un frameskip 0... es decir no hace autoframeskip parece que el frameskip se quede fijo.
Es algo que he notado en todos mis juegos.

Saludos

SplinterGU

Quote from: BoMbErLiNk on June 11, 2010, 01:18:12 PM
El otro dia hice una especie de " camuflaje óptico " :

(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.

y quien te dijo como hacerlo y quien te ayudo???
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: Hokutoy on June 11, 2010, 01:46:35 PM
Quote from: BoMbErLiNk on June 11, 2010, 01:18:12 PM
El otro dia hice una especie de " camuflaje óptico " :

(Supongo que se ve el enemigo aunque este camuflado  :D )

Lo que hace es coger el escenario de atrás, aumentarlo y pegarlo en el personaje, respetando los huecos de la silueta.

Creo que es exactamente lo que necesitas, pero en lugar de la silueta de un personaje solo el circulo de la mirilla, si te interesa te paso el código.

Eso es exactamente lo que necesito... gracias por compartir!

Splinter lo del fameskrip en la wiz es algo muy raro... quizá alguien puede arrojar algo mas de luz sobre esto pero a mi me parece que si pones un frameskip de 3 siempre te hace el frameskip 3 aunque el rendimiento en esa parte del programa de para usar un frameskip 0... es decir no hace autoframeskip parece que el frameskip se quede fijo.
Es algo que he notado en todos mis juegos.

Saludos

el frameskip funciona, eso si, lo que sucede es que la wiz no puede hacer la pausa de 60fps porque el minimo sleep no lo permite, proba haciendo tu juego a 50fps.

fijate le echo de drumpi que hace fskip cada tanto, y no siempre.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Comparte el código con nosotros maestro Bomber. Thanks  :D

Hokutoy

Probare a hacer el juego a 50 frames (aunque soy amante de los 60 frames) y a activar el frameskip a ver si noto mejoría en el funcionamiento.

Gracias!

Espero el codigo de la "lupa"! Asias!

BoMbErLiNk

Espera, creo que tendre que retocar bastante el código para que haga algo como lo que buscas, pero si quieres ir avanzando en algo te explico un paso muy fácil para hacer el recorte circular de la lupa.

1) Necesitas un "molde" del gráfico de la lupa, parte solida y transparente, el agujero transparente, si son 2 colores quizas quede más claro, yo uso color 0 para el transparente y color 5 para el solido (no funcionará bien en 32bits, a mi desde luego, pero supongo que si es para la Wiz utilizas 16bits).
2) Sobre el gráfico definitivo, antes de mostrarlo en pantalla le haces un MAP_BLOCK_COPY del molde de la lupa con FLAGS 32 en cada frame en el que cambie la imagen (aquí le das las gracias a Splinter, parte en la que me ayudo, antes de que me envie a las TMNT  ;D)
3) Lísto

El " gráfico definitivo ", podría ser un new_map, del tamaño que quieras que sea la lupa (parte visible + el marco de la lupa), ahora faltaría hacer que pegues el gráfico de la pantalla con zoom sobre ese new_map a cada frame, get_screen puede ser difícil de manejar por ser acumulativo, en ese momento quieres añadir movimiento de scroll o algo ?