Hola. Estoy haciendo un juego de plataformas a dos jugadores, cada uno con su view, y como Game Maker no permite que haya dos rooms a la vez lo que he hecho ha sido hacer un background muy grande, con las distintas dependencias del nivel en cuesti?n.
La cosa es que cuando el personaje se aproxima al final de un ?rea, la view no se detiene y permite ver la otra ?rea, causando un mal efecto.
He tenido que separar mucho las ?reas y poner bloques para que el personaje no avance y no las vea, pero preferir?a saber si se puede hacer que la view no siga avanzando(como cuando choca con el borde de la room) para evitarme estos problemas y hacer los backgrounds lo menos extensos posible para ahorrarme tiempo de carga.
Gracias de antemano. :)
Pues primero que todo tendr?as que deshabilitar el movimiento autom?tizado de la
view en el
editor de rooms y luego programar el nuevo movimiento manualmente en el evento
Step utilizando las funciones
min() y
max() para limitar el alcance de la view seg?n la zona, para lo que te recomiendo utilices una sentencia
switch.
Quedar?a algo as?:
Citarswitch (Zona)
{
case Zona1:
view_xview[n]=min(max(L?miteIzq,Posici?nXSiNoHubiueranL?mites),L?miteDer);
view_yview[n]=min(max(L?miteSup,Posici?nYSiNoHubiueranL?mites),L?miteInf);
break;
case Zona2:
...
}
Quiz? suene complicado, pero una vez que lo comprendas resulta f?cil de hacer.
:o omg
En realidad ya lo solucion?, simplemente cre? un objeto con el que mi personaje cuando choca, modifica el horizontal border de la view, haciendo que mi personaje se pueda acercar al borde de la view e impida que se vean otras zonas. Cuando se acerca al borde, los bloques que limitan el ?rea impiden que se mueva, con lo que no toca el borde nunca, y el ?rea no se ve.
Cuando no toca dicho objeto, hago que al horizontal boder se le sume una cantidad media cada step hasta llegar al borde anterior.
Cita de: Hackware en Septiembre 02, 2010, 11:56:27 PM
Citarswitch (Zona)
{
case Zona1:
view_xview[n]=min(max(L?miteIzq,Posici?nXSiNoHubiueranL?mites),L?miteDer);
view_yview[n]=min(max(L?miteSup,Posici?nYSiNoHubiueranL?mites),L?miteInf);
break;
case Zona2:
...
}
Eso parece complicado pero lo mirar? por si acaso me sirve en el futuro.
Gracias de todas formas ^^