Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Camara estilo metroid  (Leído 872 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado somnus

en: Junio 30, 2018, 02:23:59 am
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:

Código: [Seleccionar]
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.


Código: [Seleccionar]
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;
}


Código: [Seleccionar]
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





« última modificación: Julio 25, 2018, 12:47:42 am por somnus »

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado kostra

  • Legendario
  • *
  • Puntos: 2474
  • Mensajes: 2.037
  • Agradecido: 89 veces
  • Sexo: Femenino
  • Sé literalmente el sentido de la vida.
    • Ver Perfil
Respuesta #1 en: Julio 24, 2018, 10:33:08 pm
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?

"ola k ase clickarme o k ase"
la imagen no se quita xD
 


Desconectado somnus

Respuesta #2 en: Julio 25, 2018, 12:47:23 am
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

Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala
 


Desconectado kostra

  • Legendario
  • *
  • Puntos: 2474
  • Mensajes: 2.037
  • Agradecido: 89 veces
  • Sexo: Femenino
  • Sé literalmente el sentido de la vida.
    • Ver Perfil
Respuesta #3 en: Julio 25, 2018, 01:08:08 am
viendo el video creo hasta que he pillao el truco xD

Gracias!! :B

"ola k ase clickarme o k ase"
la imagen no se quita xD