Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: 12nes en Agosto 14, 2012, 06:56:06 PM

Título: camara que enfoca a dos personajes[solucionado]
Publicado por: 12nes en Agosto 14, 2012, 06:56:06 PM
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!
Título: Re:camara que enfoca a dos personajes
Publicado por: 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
Título: Re:camara que enfoca a dos personajes
Publicado por: 12nes en Agosto 14, 2012, 08:08:02 PM
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