Hola hermosa comunidad!
Les traigo otra duda :-[
Estoy haciendo un juego de plataformas/peleas en 2D
quería que me explicaran como puedo hacer una camara que enfoque a los dos personajes al mismo tiempo
y si los personajes se alejan mucho entre sí la camara tambien se aleja para poder capturarlos a los dos.
saludos y gracias anticipadas!
Te hice un ejemplo que esta adjunto, si no queres descargarlo aca va lo importante:
En un objeto controlador para no mezclar pones
En Create:
[gml]//SETEO DE VARIABLES
//Bordes: Distancia del objeto al borde de la pantalla
borde_h = 50 //Borde horizontal
borde_v = 50 //Borde vertical
//Proporciones: Proporcion de la view, por ejemplo las pantallas de PC son 3:2,
// las pantallas anchas 16:9, etc.
// En este caso usamos 3:2 porque los puertos son 640x480
// Tambien se pueden obtener dividiendo el ancho por el alto
prop_h = 3 //Numero antes de los dos puntos
prop_v = 2 //Numero despues de los dos puntos
//Minimo del tamaño de pantalla: Porque si se acercan mucho los jugadores se
// podría ver con mucho zoom
min_h = 300
min_v = 200[/gml]
En Step:
[gml]//Saber la altura y anchura de la view ------------------------------------------------------------------------------------------------
view_wview[0] = abs(obj_0.x-obj_1.x) + borde_h //El ancho de la view es la distancia horizontal entre los jugadores mas el borde
view_hview[0] = abs(obj_0.y-obj_1.y) + borde_v //El alto de la view es la distancia vertical entre los jugadores mas el borde
if view_wview[0]<min_h view_wview=min_h //Si el ancho de la view es muy poco limitarlo al minimo
if view_hview[0]<min_v view_hview=min_v //Si el alto de la view es muy poco limitarlo al minimo
//Hacer las proporciones ---------------------------------------------------------------------------------------------------------------
if view_wview[0]*prop_v > view_hview*prop_h { //Si el ancho es mayor que lo que deberia
view_hview[0] = view_wview[0] / (prop_h/prop_v) //Hacer el alto como corresponde
}
else { //Si en cambio el alto es mayor que lo que deberia
view_wview[0] = view_hview[0] * (prop_h/prop_v) //Hacer el ancho como corresponde
}
//Mover la camara ----------------------------------------------------------------------------------------------------------------------
view_xview[0] = (obj_0.x+obj_1.x)/2 - (view_wview/2) //La coordenada horizontal es igual al promedio de la posicion de los
//jugadores, es decir justo al medio. Luego se le resta la mitad del
//ancho porque la coordenada correponde a la esquina superior izquierda
view_yview[0] = (obj_0.y+obj_1.y)/2 - (view_hview/2) //La coordenada vertical es igual al promedio de la posicion de los
//jugadores, es decir justo al medio. Luego se le resta la mitad del
//alto porque la coordenada correponde a la esquina superior izquierda[/gml]
En la room chequea "Enable the use of views" y "Visible when room starts"
Luego a los dos "W" los puse en 640 y los "H" en 320
Ya deberia estar, en el ejemplo manejas con las flechas y el otro cuadrado con WASD
Cita de: Mgbu en Agosto 14, 2012, 07:53:29 PM
Te hice un ejemplo que esta adjunto, si no queres descargarlo aca va lo importante:
En un objeto controlador para no mezclar pones
En Create:
[gml]//SETEO DE VARIABLES
//Bordes: Distancia del objeto al borde de la pantalla
borde_h = 50 //Borde horizontal
borde_v = 50 //Borde vertical
//Proporciones: Proporcion de la view, por ejemplo las pantallas de PC son 3:2,
// las pantallas anchas 16:9, etc.
// En este caso usamos 3:2 porque los puertos son 640x480
// Tambien se pueden obtener dividiendo el ancho por el alto
prop_h = 3 //Numero antes de los dos puntos
prop_v = 2 //Numero despues de los dos puntos
//Minimo del tamaño de pantalla: Porque si se acercan mucho los jugadores se
// podría ver con mucho zoom
min_h = 300
min_v = 200[/gml]
En Step:
[gml]//Saber la altura y anchura de la view ------------------------------------------------------------------------------------------------
view_wview[0] = abs(obj_0.x-obj_1.x) + borde_h //El ancho de la view es la distancia horizontal entre los jugadores mas el borde
view_hview[0] = abs(obj_0.y-obj_1.y) + borde_v //El alto de la view es la distancia vertical entre los jugadores mas el borde
if view_wview[0]<min_h view_wview=min_h //Si el ancho de la view es muy poco limitarlo al minimo
if view_hview[0]<min_v view_hview=min_v //Si el alto de la view es muy poco limitarlo al minimo
//Hacer las proporciones ---------------------------------------------------------------------------------------------------------------
if view_wview[0]*prop_v > view_hview*prop_h { //Si el ancho es mayor que lo que deberia
view_hview[0] = view_wview[0] / (prop_h/prop_v) //Hacer el alto como corresponde
}
else { //Si en cambio el alto es mayor que lo que deberia
view_wview[0] = view_hview[0] * (prop_h/prop_v) //Hacer el ancho como corresponde
}
//Mover la camara ----------------------------------------------------------------------------------------------------------------------
view_xview[0] = (obj_0.x+obj_1.x)/2 - (view_wview/2) //La coordenada horizontal es igual al promedio de la posicion de los
//jugadores, es decir justo al medio. Luego se le resta la mitad del
//ancho porque la coordenada correponde a la esquina superior izquierda
view_yview[0] = (obj_0.y+obj_1.y)/2 - (view_hview/2) //La coordenada vertical es igual al promedio de la posicion de los
//jugadores, es decir justo al medio. Luego se le resta la mitad del
//alto porque la coordenada correponde a la esquina superior izquierda[/gml]
En la room chequea "Enable the use of views" y "Visible when room starts"
Luego a los dos "W" los puse en 640 y los "H" en 320
Ya deberia estar, en el ejemplo manejas con las flechas y el otro cuadrado con WASD
:D muchas gracias si me funcionó
y debo agregar que te quedo P-E-R-F-E-C-T-O con todas las letras