Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: santkont en Marzo 23, 2010, 01:56:45 AM

Título: Mover view en bloques
Publicado por: santkont en Marzo 23, 2010, 01:56:45 AM
(http://i41.tinypic.com/x3er9c.png)

Empiezo con una im?gen  ;D

C?mo puedo hacer que la view siga a mi personaje pero que se mueva por "bloques"?
En el dibujo no me esforc? mucho pero lo que quiero hacer es ahorrar rooms usando este sistema donde va a dar la sensacion de que es otra c?mara.
Lo que yo intent? fu? hacer "si la X del objeto (personaje) es mayor al de la view, la view se corre X(ancho de la view) hacia la derecha" y lo mismo con el eje Y, pero lo que pasa es que toma los valores de 0.0 de la view
Por eso quer?a saber si hay alguna variable o algo como para determinar si un objeto est? dentro o fuera de una view(tambien para poder decir que todos los objetos fuera de la view sean desactivados para ahorrar recursos y los de dentro sean los activos.
Título: Re: Mover view en bloques
Publicado por: gabbers en Marzo 23, 2010, 02:41:52 AM
ahora mismo se me ocurre que coloques un objeto invisible al final de cada room, y cuando el personaje lo toque, le dices a la view, donde tiene que mirar, hasta el proximo objeto
Título: Re: Mover view en bloques
Publicado por: santkont en Marzo 24, 2010, 04:16:55 AM
Gracias por responder  ;D
Si, pero ser?an muchos objetos...

No hay alguna variable que diga si un objeto est? dentro o fuera de la view?
Título: Re: Mover view en bloques
Publicado por: soccer2008 en Marzo 24, 2010, 07:11:39 PM
usa esto: view_width (ancho de una view), view_height (alto de view)
Título: Re: Mover view en bloques
Publicado por: santkont en Marzo 24, 2010, 11:13:16 PM
Yo uso :GM8: Lite y esas variables no est?n en la lista...
Título: Re: Mover view en bloques
Publicado por: soccer2008 en Marzo 24, 2010, 11:23:17 PM
entonces usa variables globales q contengan el tama?o de las view XD XD XD
Título: Re: Mover view en bloques
Publicado por: rodo16 en Marzo 24, 2010, 11:43:44 PM
pod?s usar varias rooms  en vez de views
Título: Re: Mover view en bloques
Publicado por: santkont en Marzo 25, 2010, 12:47:13 AM
Ese es el principal objetivo. Mis sprites son tan chicos que tranquilamente puedo hacer 5 o 6 "rooms" con las view y ahorrarme rooms, y todo el c?digo que llevar?a hacer el ubicar al personaje correctamente (sale por la derecha de la 1? room y entra en la 2? room por izquierda.

Gracias por responder  ;D
Título: Re: Mover view en bloques
Publicado por: soccer2008 en Marzo 26, 2010, 02:11:07 PM
No se si te entendi, mira el ejemplo XD XD XD
Título: Re: Mover view en bloques
Publicado por: santkont en Marzo 26, 2010, 04:18:50 PM
No entendiste nada  XD

En mi juego hay una unica view, que ocupa toda la pantalla.
Que se mueve por "bloques" como Zelda de la NES.(reci?n me acuerdo de este juego)

Lo que yo quiero es que la view no se "mueva" hasta el siguiente bloque, sino que sea instantaneo.

Gracias por el ejemplo aunque no me sirvi?  XD ;D
Título: Re: Mover view en bloques
Publicado por: soccer2008 en Marzo 26, 2010, 10:51:21 PM
Lo q quieres hacer es q la ?nica view siga al personaje principal y cuando este atraviese un bloke enfoque al protagonista y el bloque???...espero q te hay entendido cuando tenga algo listo lo subo XD XD XD
Título: Re: Mover view en bloques
Publicado por: Wadk en Marzo 27, 2010, 02:50:04 AM
En realidad es muy sencillo, lo consegu? con 2 l?neas de c?digo =P.
Adjunto ejemplo.
Si te interesa saber c?mo funciona y no lo entend?s, decime que te explico.
Título: Re: Mover view en bloques
Publicado por: santkont en Marzo 27, 2010, 11:09:03 AM
Eso es! XD

Aunque son dos lineas de codigo "sencillas" no entiendo.
No soy un gran programador...(por eso eleg? :GM8:)

Espero tu explicaci?n con ansias

Gracias!  ;D
Título: Re: Mover view en bloques
Publicado por: Wadk en Marzo 27, 2010, 04:44:29 PM
Las l?neas m?gicas son estas:
view_xview[0]=x-(x mod view_wview[0]);
view_yview[0]=y-(y mod view_hview[0]);

Las otras dos son para que el objeto se mueva con las flechas y no salga del room.

Mir?, mod devuelve el resto de una divisi?n entera, o en otras palabras, resta al primer factor el segundo hasta que el primero sea menor que el segundo.
Unos ejemplos:
7 mod 2=1 (7/2=3 y resta 1 ? 7-2=5, 5-2=3, 3-2=1, 1<2, no se resta m?s).
7 mod 3=1 (7/3=2 y resta 1 ? 7-3=4, 4-3=1, 1<3, no se resta m?s).
7 mod 4=3 (7/4=1 y resta 3 ? 7-4=3, 3<4, no se resta m?s).
7 mod 5=2 (7/5=1 y resta 2 ? 7-5=2, 2<5, no se resta m?s).

En el c?digo, hago x mod view_wview[0]. Eso b?sicamente devuelve cu?nto le sobra a x para ser divisible entre view_wview[0] (el ancho de la view, en este caso 160). Despu?s, este valor lo resto a x, y as? x queda redondeado hacia abajo en un valor divisible entre 160 (0, 160, 320, etc) y posiciono la coordenada x de la view en ese lugar.
Un ejemplo por si no te qued? claro (no s? si lo expliqu? muy bien XD) :

Supongamos que el peronaje est? en (400,240), y el ancho y alto de la view son 160:
x(400) mod view_wview[0](160)=80 (400/160=2 y resta 80 ? 400-160=240, 240-160=80, 80<160, no se resta m?s).
x(400)-80=320, view_xview[0] se posiciona en 320 (que es 160*2, o sea el ancho de la view*2).
Despu?s:
y(240) mod view_hview[0](160)=80 (240/160=2 y resta 80 ? 240-160=80, 80<160, no se resta m?s).
y(240)-80=160, view_yview[0] se posiciona en 160 (que es el alto de la view).

Por cierto, si el valor de x e y fuera m?s bajo que 160, el resultado ser?a 0, y la view se posicionar?a en la esquina superior izquierda.

Espero que hayas entendido ;).
Título: Re: Mover view en bloques
Publicado por: santkont en Marzo 27, 2010, 09:08:24 PM
En otras palabras...(las m?as ;D)

Desde la posici?n del personaje (x=400), se cuenta cuantas view entran hasta 0 (divisores de 160) y lo que sobra (80) se lo resto a la posici?n del personaje (80-400). Eso me d? siempre un n?mero divisor del ancho de la view.(0,160,320,480,640)

Lo mismo para "y".

Entend? bien? ;) pas? de grado?  :D

(Odio las matematicas >:(, pero las necesito XD)
Título: Re: Mover view en bloques
Publicado por: Wadk en Marzo 27, 2010, 10:24:48 PM
Si, pasaste, felicidades XD.