Nombre del creador: Somnus
Breve descripción de su función
este es un ejemplo de como crear una camara para un juego tipo metroid donde puede haber rooms de direntes medidas, ya sea rooms grandes, pasillos, etc.
Versión GM utilizada
este codigo esta hecho con GMS 2, sin embargo la misma logica puede ser utilizada para versiones anteriores
Código del Script -si se usan argumentos, se debe indicar su función-
Se van a necesitar lo siguiente:
obj_room
obj_camera
obj_jugador
un room con las medidas deseadas
global.active_room; //en esta variable guardaremos el room en el que nos encontramos
Empecemos con el funcionamiento:
OBJ_PLAYER:
este puede ser cualquier objeto que se mueva dentro de cada room de juego, moverse a las 4 direcciones, este lo pueden hacer como mejor les paresca.
OBJ_ROOM.-
las medidas de este objeto van a indicar el tamano del room cabe mencionar que este no es un room de GMS, si no las areas en las que estaremos haciendo las transiciones
evento step:
if( x < obj_player.x
&& obj_player.x < x + sprite_width
&& y < obj_player.y
&& obj_player.y < y + sprite_height)
{
global.active_room = self;
}
OBJ_CAMERA.- este objeto es el que va a estar moviendo la camara segun la posicion del jugador pero se movera hasta los margenes del room activo.
evento step:
//asumiendo que las medidas de la view es 640 x 480
view_middle_width = 640/2;
view_middle_height = 480/2
view_xmin = global.active_room.x; //margen minimo del room en eje X
view_ymin = global.active_room.y; //margen minimo del room en eje Y
view_xmax = global.active_room.x + global.active_room.sprite_width; //margen maximo del room en eje X
view_ymax = global.active_room.y + global.active_room.sprite_height; //margen maximo del room en eje Y
camera_set_view_pos
(
view_camera[ 0 ], //la camara/view a mover, en este caso 0
// la posicion de la camara en eje X, dentro de los margenes minimo y maximo del room activo
clamp( obj_nem.x, view_xmin + view_middle_width, view_xmax - view_middle_width ) - view_middle_width,
// la posicion de la camara en eje Y, dentro de los margenes minimo y maximo del room activo
clamp( obj_nem.y, view_ymin + view_middle_height, view_ymax - view_middle_height ) - view_middle_height
);
el room de game maker debe de ser grande, lo suficiente para contener los obj_room dentro de el,
supongamos si la view es de 640x480, entonces podriamos tener:
- 1 room de 2560 x 480
entonces este room puede contener 2 obj_room dentro
el primero:
x:0
y:0
width: 1920
height:480
el segundo:
x:1920
y:0
width: 640
height:480
entonces, al mover el jugador, este podra ir libremente dentro todo el obj_room 1, al llegar al obj_room 2, este se activara y el view ahora sera el correspondiente al alrea del obj_room 2.
FUNCIONAMIENTO:
lo que se hace es que el area que se muestra por pantalla es aquella definida por el obj_room, al momento de salir del room actual y entrar en otro, el nuevo se vuelve el activo y la view muestra el area correspondiente a este, de esta misma manera se pueden tener tantos rooms se quiera de los tamanos que quieran, esto puede ser un room grande donde se encuentra el enemigo y luego pasar por una pasillo largo, el cual puede ser un pedazo de la pantalla.
NOTAS:
la variale global para saber cual es el room activo, se puede poner donde se quiera, solo que tiene que estar definida porque es de esta de donse se obtienen las medidas del room activo del juego.
link del ejecutable:
https://marketplace.yoyogames.com/assets/7122/sliding-camera
esto hace que puedas poner en una misma room varias rooms y la cámara se mueva de un lado a otro inteligentemente, o van por rooms separadas y haces el efecto, o como va la cosa?
dentro del GMS room, creas rooms mas pequenos de diferentes tamanos, tu puedes ir de un lugar a otro dentro de la misma room, y la camara se va a mover en esa room, cuando salgas de esa room, la camara se va a activar en la nueva room a la que enraste y podras moverte libremente ya que la camara te seguira.
dejo el link para que te descargues el ejecutable donde viene el ejemplo funcionando, por cierto viene otro ejemplo un poco mas buscado, pero falta perfeccionarlo, espero y te sirva
https://marketplace.yoyogames.com/assets/7122/sliding-camera
viendo el video creo hasta que he pillao el truco xD
Gracias!! :B