Como hacer un Scroll tipo ZELDA NES?

Started by Tayura_TT, September 07, 2017, 02:49:00 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Tayura_TT

Primeramente un saludos a todos los miembros del foro, esta es la primera vez que me animo a participar con un post (de hecho, es la primera vez que publico en un foro xD) Esto se debe a que tengo una duda a la cual por mas vueltas que le trato de dar no le hayo solución, se trata  de como hacer un Scroll (o movimiento de la camara) al estilo Zelda Nes (El primero de todos).

Me explico...Digamos que el scroll del mapa entero se divide en 4 cuadrados.
1 = Cuadro superior izquierdo
2 = Cuadro superior Derecho
3 = Cuadro inferior Izquierdo
4 = Cuadro Inferior Derecho

      1   |   2
     ----------
      3   |   4

Pero la ventana del juego solo muestra entero un cuadro (digamos que el cuadro 1).

Lo que yo quiero hacer es que cuando el Personaje (Avatar, character, etc..) llegue al borde del cuadro 1 por la derecha, el mapa cambie y se muestre el contenido del cuadro 2 y si esta desde el 1 y baja hasta el borde de este se muestre el cuadro 3.

Espero haberme explicado bien jaja básicamente quiero que el mapa se muestre como el zelda de la Nes. Espero puedan ayudarme con esta duda, algún usuario mas experimentado en BennuGD. Si pueden mostrar un código de ejemplo o si bien existe un tutorial por allí lo agradecería, soy nuevo con esto del desarrollo del videojuego en bennu.

Sin mas que decir gracias y espero me ayuden jaja.
Trabajos Actuales: "Proyecto Chizuru" y "Hoppy Bat"

Goku jr

Buenas!
Lo único que se me ocurre,esque cuando tú personaje llegue a la zona indicada,hagas otro start_scroll y actualices los gráficos por los que toquen,y cambies los valores de x,y por los que toquen.
Ahora estoi con el móvil y no te puedo poner un ejemplo.espero a ver ayudado.
Saludos!

FreeYourMind

Depende como lo quieras hacer, si quieres que la imagen cambie sin efecto puedes sencillamente cambiar el fondo cuando el personaje llegue al borde y despues situas el personaje en el borde opuesto, si quieres tener un mapa gigante y que se mueva rapidamente al bloque siguiente cuando llegues al borde, sencillamente haces lo mismo con el personaje pero mueves el mapa en una pequeña transición hasta que termine en las coordenadas exactas y despues lo paras.

Tayura_TT

Quote from: FreeYourMind on September 07, 2017, 07:47:15 AM
Depende como lo quieras hacer, si quieres que la imagen cambie sin efecto puedes sencillamente cambiar el fondo cuando el personaje llegue al borde y despues situas el personaje en el borde opuesto, si quieres tener un mapa gigante y que se mueva rapidamente al bloque siguiente cuando llegues al borde, sencillamente haces lo mismo con el personaje pero mueves el mapa en una pequeña transición hasta que termine en las coordenadas exactas y despues lo paras.

Justo eso ultimo es lo que quiero realizar, un mapa enorme y que cuando se llegue al borde pase al siguiente bloque.

Como realizo esa transicion? y que función debo de usar?

me fije que en la función start_scroll() en sus últimos dos parámetros (los cuales son opcionales) me hablan de añadir un gráfico de destino, lo primero que pensé es que con esto se refiere a que el scroll se traslada a dicho gráfico que se establezca como destino pero... lo probé y no me funciono x.X (Probablemente no use la función como debía ser).

La otra función que vi en la wiki fue move_scroll() la cual me pide como parámetro el "scroll number", que para lo que tengo entendido este parámetro es como el identificador de cada scroll, pero si se trata de una sola imagen grande y no varias...como usaría esta función?

Me gustaría que me dijeras que función seria la indicada para esto y de ser posible que me des una breve explicación de como ejercerla en el código, espero puedas ayudarme con ese favor y así me oriento un poco.

Lamento si mis preguntas son de principiante jaja pero como dije estoy iniciando con esto, gracias de ante mano por responder.
Trabajos Actuales: "Proyecto Chizuru" y "Hoppy Bat"

Tayura_TT

Quote from: Goku jr on September 07, 2017, 07:35:00 AM
Buenas!
Lo único que se me ocurre,esque cuando tú personaje llegue a la zona indicada,hagas otro start_scroll y actualices los gráficos por los que toquen,y cambies los valores de x,y por los que toquen.
Ahora estoi con el móvil y no te puedo poner un ejemplo.espero a ver ayudado.
Saludos!

Saludos Goku Jr, pensaba mas en que fuese un mapa enorme y que los bloque se fueran mostrando a medida que el personaje llegue al borde de estos, de esta manera no tendría que estar cargando tantos mapas en pantalla y actualizar la posición del personaje xd. Sin embargo tu idea puede ser una alternativa en caso de que no logre hacerlo de la forma que quiero. Agradezco que hayas respondido de todas formas  ;)
Trabajos Actuales: "Proyecto Chizuru" y "Hoppy Bat"

FreeYourMind

para eso no necesitas usar start_scroll, hacerlo directamente sobre un mapa grande (grafico) es mas sencillo, solo tienes que hacer una sentencia FROM por ejemplo, donde vas a mover el X y el Y del grafico hasta que llegue a la posicion que deseas.

te lo explico por pseudocodigo, no puedo ponerme a picar codigo ahora que estoy en el curro xD

Imagina una resolucion de juego de 320x240, y un mapa de 4 habitaciones, para eso necesitas un grafico de tamaño = 320*240 * 4.

primero situas el grafico en la primera, o sea esquina derecha/fondo, las coordenadas serian:

x = 0 - 320;
y = 0 - 240;

despues si vas a la habitacion de la izquierda harias un FROM X actual TO X = 0; X++; FRAME; END

Solo tienes que corregir valores, pero la idea es la que te he puesto.

l1nk3rn3l

 ;D

existe un zelda ya hecho para que te guies

requiere chrome
https://coldev.sourceforge.io/bennugd/onlinedemos/ZeldaNacl/

El codigo fuente de zelda esta ubicado en ejemplos avanzados (Advance examples)
https://sourceforge.net/projects/coldev/files/bennupack/


;)

Tayura_TT

Quote from: FreeYourMind on September 07, 2017, 10:25:01 AM
para eso no necesitas usar start_scroll, hacerlo directamente sobre un mapa grande (grafico) es mas sencillo, solo tienes que hacer una sentencia FROM por ejemplo, donde vas a mover el X y el Y del grafico hasta que llegue a la posicion que deseas.

te lo explico por pseudocodigo, no puedo ponerme a picar codigo ahora que estoy en el curro xD

Imagina una resolucion de juego de 320x240, y un mapa de 4 habitaciones, para eso necesitas un grafico de tamaño = 320*240 * 4.

primero situas el grafico en la primera, o sea esquina derecha/fondo, las coordenadas serian:

x = 0 - 320;
y = 0 - 240;

despues si vas a la habitacion de la izquierda harias un FROM X actual TO X = 0; X++; FRAME; END

Solo tienes que corregir valores, pero la idea es la que te he puesto.

Excelente! Realmente me ha funcionado, me centre tanto con las funciones del scroll que daba por hecho que por allí estaba la solución a mi problema y no pense en otra opciones como el from to jaja agradezco la ayuda.

Y veo que la comunidad es activa acá en el foro, siempre es bueno eso, agradezco a todos los que respondieron al post con sus ideas y nada, a continuar con mi proyecto  ;D

Oh! y también checare el zelda que esta entre los ejemplos (la verdad no lo habia notado xd) ya que se asemeja a lo que quiero realizar.
Trabajos Actuales: "Proyecto Chizuru" y "Hoppy Bat"

FreeYourMind

Me alegro que te haya servido de algo jaja
El Zelda del ejemplo tiene scroll como el de SNES, no es con pantallas estaticas como el de NES, pero te ayudará bastante para integrar las demas cosas del juego

ale_wizard666

Quote from: l1nk3rn3l on September 07, 2017, 04:17:27 PM
;D

existe un zelda ya hecho para que te guies

requiere chrome
https://coldev.sourceforge.io/bennugd/onlinedemos/ZeldaNacl/

El codigo fuente de zelda esta ubicado en ejemplos avanzados (Advance examples)
https://sourceforge.net/projects/coldev/files/bennupack/


;)

Hola l1nk3rn3l
Una consulta.
Sabes como hacer para que el juego se ejecute desde un navegados?

Un saludo

Ale



l1nk3rn3l

#10
Otro zelda para estudiar

https://github.com/SpoonmanGames/ZeldaRemade

el mismo grupo tiene un motor de bomberman, muy bueno para empezar (solo le falta la IA )

https://github.com/SpoonmanGames/BomberChan

aqui version corregida

https://github.com/SpoonmanGames/BomberChan/issues/1

para que los juegos Bennu se ejecuten en navegador debes usar el bennupack chrome 


https://sourceforge.net/projects/coldev/files/chrome%20native%20client/

Obviamente funciona en chrome, cuando bennu este portado a html5 funcionara en cualquier navegador...
Por el momento bennu funciona de esta forma y podras correr juegos bennu en cualquier S.O. que tenga chrome..



Drumpi

#11
Otra forma es que tengas el cuadrado 1 en un mapa, y ese mapa asociado a un proceso puesto al fondo (o sea, con una Z muy alta).
Cuando el prota llegue al borde, creas otro proceso, le asignas el cuadrado 2 y lo pones fuera de la pantalla (obviamente, debes crear todos los enemigos y objetos de esta pantalla y ponerlos en la posición adecuada).
Acto seguido, congelas todos los procesos de pantalla, y con un FOR los mueves todos, incluidos los fondos, hasta que el cuadrado 2 quede centrado en pantalla. Ya sólo te queda eliminar los procesos de la pantalla que ha desaparecido, despertar al prota y activar los procesos de la nueva pantalla.

Haciendo esto y con una buena gestión de LOAD/UNLOAD de gráficos, puedes ahorrar mucha memoria y recursos ;) Es que cuando alguien dice "carga todo el mapa gigante en memoria en un sólo mapa", me entra picazón en el cogote :D Si por lo menos se usase un scroll tileado...

PD: El valor opcional de START_SCROLL, el mapa destino, sirve para dibujar el scroll sobre un mapa en lugar de el "fondo" de la pantalla. Es una función muy lenta, pero muy útil, ya que al tener el scroll en un MAP, puedes rotarlo, escalarlo, aplicarle efectos de blend, o usarlo de textura para otras cosas como el suelo de un modo7, o para una ventana o una tele de un mapa 3D.
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)

Futu-block

yo hice una cosa parecida con el ''Ranita'' pero mientras hacia la transación cambiaba de grafico, nada de scroll