Noticias

¡Ayuda a la Comunidad GM, haz una donación!

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!.

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - T789

Páginas: 1 2 3
1
Saludos ElKopiraih

Te sugiero que uses la funcion "point_direction"
var range, dirPlayer, colPlayer;
range = 128;
dirPlayer = point_direction(x, y, obj_player.x, obj_player.y);

if collision_line(x, y, x+lengthdir_x(range, dirPlayer), y+lengthdir_y(range, dirPlayer), obj_player, 0, 1)
  // Si esta en una direccion por debajo del
  if (dirPlayer > 225 && dirPlayer < 315) {
    direction = dirPlayer;
    speed = 4;
  }

2
Preguntas y respuestas / Re:Fondos de escenarios animados
« en: Enero 21, 2021, 06:41:46 pm »
Saludos OmarMakero

Existen varias formas de hacerlo pero depende del tipo de escenario que tengas en mente, yo uso un truco que conlleva arrays
/// Event Create
bg[0] = bg_0;
bg[1] = bg_1;
bg[2] = bg_2;
bg[3] = bg_3;

bg_numb = 4;  //numero de backgrounds
bg_index = 0;  //indice del background
bg_speed = 0.25;  //velocidad en la animacion
/// Event draw
// Animación del background
bg_index += bg_anim;
if (bg_index >= bg_numb)
  bg_index = 0;

draw_background(bg[floor(bg_index)], x, y)
Y ya en el evento draw pongo un draw_background y hago que dibuje la array. Ya con eso puedes tener un escenario animado, y tambien sugiero que mantengas los valores de "bg_speed" entre 0 y 1

3
OmarMakero buena sugerencia, pero no deberia ser
if !foto
Sino:
if (foto != "") screen_save(foto);
Pues esas funciones solo devuelven cadenas

4
Saludos Alemar5

Te puedo indicar como funciona el "get_open_filename()", esa funcion solo sirve para seleccionar un archivo que se encuentra en tu disco duro, por lo que no hay una ruta definida en la que buscar los archivos.
/// Event Create
file = get_open_filename("Selecciona una imagen de tu dico duro |.png|.jpg|.bmp", "")
sprite = sprite_add(file, 0, 0, 0, 0, 0);

/// Event Draw
draw_text(32, 32, "Ruta del sprite seleccionado: "+file)
draw_sprite(sprite, 0, 48, 32)
Puedes usar ese codigo para probar la funcion. Ahora creo que para la funcion de get_save_filename() necesitas tener algun archivo en la pestaña de include_files (nose si esa pestaña exista en versiones posteriores a GM8)

5
Preguntas y respuestas / Re:Bloques que reaparecen al azar por la room
« en: Diciembre 01, 2020, 06:41:52 pm »
Saludos Zhekken

Para resolver tu primera duda, sugiero
que cambies tu codigo por el siguiente
/// Donde sea que lo hayas puesto
if !instance_exists(obj_bloque)
{
  var i, posx, posy;
  i = 0;
  repeat(10) {
    posx[i] = random_range(32, 416)
    posy[i] = random_range(32, 160)
    if (i > 0) {
      while(posx[i] == posx[i-1])
       posx[i] = random_range(32, 416);
      while(posy[i] == posy[i-1])
       posy[i] = random_range(32, 160);
    }
    with(instance_create(posx[i], posy[i], obj_bloque) {
      if !place_snapped(32, 8)
      move_snap(32, 8)
    }
    // Aumentar indice
    i += 1;
  }
}

6
Preguntas y respuestas / Re:Función para esperar cierto tiempo
« en: Noviembre 21, 2020, 05:09:06 am »
Saludos T1ag0

En GameMaker existe una funcion llamada sleep() que sirve para detener el juego un determinado numero de milisegundos, claro, esta funcion solo lo detiene en el mismo paso, y digamos que si quieres dibujar un texto antes de ejecutarla, entonces prácticamente este texto se ejecutara despues de que hayan pasado el numero de milisegundos.
Por suerte he creado un script que hace exactamente lo mismo, a diferencia de que puedo añadirle varias cosillas extras.
Acontinuacion enmarco 3 distintas versiones del script:
///sleep_color(miliseg, color)
var i;
i = 0;
do {
  draw_set_color(argument1)
  draw_rectangle(0, 0, room_width, room_height, 0)
  screen_refresh()
  i += 1;
} until (i >= argument0)
///sleep_text(miliseg, x, y, text)
var i;
i = 0;
do {
  draw_text(argument1, argument2, argument3)
  screen_refresh()
  i += 1;
} until (i >= argument0)
///sleep_sprite(miliseg, sprite, subimg, x, y)
var i;
i = 0;
do {
  draw_sprite(argument1, argument2, argument3, argument4)
  screen_refresh()
  i += 1;
} until (i >= argument0)
No se si la funcion screen_refresh() exista en versiones posteriores a GM8, si no es asi, entonces sugiero uses sleep(1) en cada script en lugar de screen_refresh(); claro, tampoco se si al cambiarlo se ignore lo demas, pero para hacerlo mas seguro, sugiero que la parte de la verificacion la hagas en el evento draw. Osea que si es una collision la hagas en el evento draw en vez de un evento step

7
Preguntas y respuestas / Re:Se activen diferentes rutas cada cierto tiempo
« en: Noviembre 18, 2020, 02:05:20 am »
Existen varios metodos. Podrias usar una variable llamada "accion" que tenga distintos valores numericos, por ejemplo que se le vaya sumando 1 cada vez que pasa algo y luego verificar los estados que tenga
/// Event Alarm[1]
switch(accion)
{
  case 0:
  //Lo que quieras
  //Poner antes del break la misma alarma[1] pero con un distinto valor
  break;

  case 1:
  //Lo que quieras
  //Poner antes del break la misma alarma[1] pero con distinto valor
  break;
}
accion += 1;
Asi puedes usar una misma alarma pero que ejecute distintas acciones segun los estados de una misma variable, y al final de esa alarma le sumas 1 a la variable para ir a un proximo estado, o, podrias dar valores aleatorios en los mismos "case" para saltarte a cualquier "case"

Tambien estan las "time lines" por si quieres hacerlo mas sencilo

8
Saludos T1ag0

Eso lo puedes hacer con el mismo instance_create, bueno no se que tan planeado quieras los movimientos pero todo podrias hacerlo programando objetos y usando alarmas.
Un ejemplo es crear una instancia de un misil y meternos en ella una vez la creemos:
/// Evento alarm[0]
with(instance_create(x, y, obj_misil)) {
  direction = point_direction(x, y, obj_p.x, obj_p.y)
  speed = 7;
}
alarm[0] = room_speed*1.5; //Fija el tiempo que quieras
En ese ejemplo nos metemos dentro de un objeto creado y le aplicamos una direccion (que seria hasta el jugador) y una velocidad. Notaras que al estar en una alarma se puede volver a utilizar indefinidamente, por lo que podrias usar una funcion choose() o irandom() para fijar distintas dimensiones

Otro ejemplo seria de que quieres crear varias instancias de distintos objetos y para ello puedes poner un choose
choose(obj_misil, obj_bala, obj_avion)

Todo depende de que es lo que quieras hacer

9
Preguntas y respuestas / Re:iniciar animacion al iniciar el juego
« en: Noviembre 08, 2020, 06:38:54 pm »
Saludos T1ag0

Eso es algo que puedes hacer sabiendo cuando debes poner cada cosa

Por ejemplo puedes poner unas variables y unas alarmas para cada cosa, en tu caso
/// Event Create
texto = "" //El texto que se mostrara primero
global.ifMove = false; //Para permitir movimiento
alarm[0] = room_speed //Tiempo para que se muestre el otro texto
/// Event alarma[0]
texto = "Ya te puedes mover" //El segundo texto que se vaya a mostrar
global.ifMove = true; //Permitir moverle al ...
/// Event Draw
draw_text(320, 240, texto) //Se dibujara lo que tenga la variable "texto" en las cordenadas que quieras (yo puse esas de prueba)
Y por si... Por ejemplo quisieras que ya no se muestre texto al pulsar la primera tecla, solo debes poner un:
/// Evento de tecla cualquiera
instance_destroy();
Y listo. Lo otro de mostrar una animacion... Pues no se a que te refieres (?), pero si queres mostrar una animacion desde tu objeto personaje, solo tenes que usar un sprite_index y una alarma para inhabilitar la animacion

10
Saludos FernandoNavarro

Puedes usar un mismo sprite y gestionar manualmente cada subimagen dependiendo de cad estado. Por ejemplo yo suelo crear un solo sprite que contenga todas las animaciones que necesito (claro puede llegar a ser un poco largo), y de paso escribo en algun comentario el orden de cada subimagen:
Código: [Seleccionar]
/* Orden de subimagenes
 0-3 //caminar
 4-6 //corriendo
 7-8 //saltando
 9-11 //buceando
*/
En tu caso si lo que quieres es hacer un ataque pues solo verifica con unos if, y de misma forma con una variable que gestione el estado de ataque
/// Event Create
atack_state = ""; //funciona para establecer el estado de ataque

/// Event Step
if (atack_state == "cargando") {
  if (image_index > 3) //En caso de que la subimagen este mas alla de las de cargando, claro... Puse 3 como ejemplo
     image_index = 0;
}
else if (atack_state == "ejecutando") {
  if (image_index < 4 or image_index > 7) //En caso de que la animacion anterior se haya restablecido pero estemos ejecutando ataque, entonces ponerla automaticamente en la primera subimagen de la ejecucion
     image_index = 4;
}
Ese codigo de ahi se encargara gestionar las subimagenes dependiendo del estado de ataque; ahora habria que verificar donde poner para cambiar los estados de ataque. Voy a usar 2 eventos de tecleo como ejemplo
/// Event Keyboard Space
if (atack_state != "ejecutando") {
  //Podrias poner aqui un aumento para una variable de daño
  atack_state = "cargando";
}

/// Event Keyboard Released Space
atack_state = "ejecutando";
Bueno eso fue un pequeño ejemplo, te sugiero que veas si no estas verificando una animacion en otra parte, para no tener problemas

11
Saludos B_12.4

Eso es muy facil, simplemente desmarca la casilla de "Delete Underlying" que te aparece en ese apartado. La casilla sirve para borrar instancias que se encuentren en la misma casilla donde se vaya a poner otra (sirve para evitar que haya 2 instacias colocadas en el mismo lugar)

Una vez que la hayas desmarcado no pasara otra vez


12
Preguntas y respuestas / Re:Como puedo registrar un cierre en el juego?
« en: Octubre 16, 2020, 07:16:37 pm »
Saludos Alemar5

No entendi exactamente que es lo que teneis de meta para lograr, pero si quieres archivar una salida del juego, podrías hacerlo con un archivo .ini que gestione cada cosilla. Un ejemplo para salir del juego:
if keyboard_check_pressed(vk_escape) {
  var exits;
  ini_open("Registro.ini")
  exits = ini_read_real("Parte1", "Salidas", 0) //Leera la clave donde se hayan el numero de salidas registradas, y si no hay ningun valor simplemente devolvera cero
  ini_write_real("Parte1", "Salidas", exits+1) //Le sumara 1 al valor actual de las salidas asignadas a la clave
  ini_close()

  game_end() //Salir del juego
}
Y para dibujar las salidas en el evento draw, seria practicamente lo mismo, a excepcion de que solo leeras y no escribiras
/// Event Draw
var salidas;
ini_open("Registro.ini")
ini_read_real("Parte1", "Salidas", 0)
ini_close()

draw_text(x, y, "Has jugado: "+string(salidas) + ", por favor vuelve mañana")

Bueno, de esa forma podrás archivar cada salida del juego, y si necesitas resetear a 0, pues simplemente lo vuelves a abrir y lo pones en 0.
Para saber como manejarlo mejor, busca la documentacion de archivos .ini aqui

13
 :'(  :'(  :'(  :'(  :'(  :'(
Bueno se me acabaron las ideas y sugerencias, asi que pasa todos los codigo de todos los eventos de tu obj_mama. Absolutamente habra que revisar todo. Espero eso funcione...  :-\

14
Bueno se me acabaron las sugerencias. Si ninguna parte esta en conflicto, probare cambiando el metodo a otro mas dinamico. Cambia todo el codigo anterior a este:
/// Event Step
if instance_exists(obj_textbox) {
  var dirObj;
  dirObj = point_direction(x, y, obj_prota.x, obj_prota.y);

  if (dirObj >= 45 && dirObj <= 135)
     sprite_index = spr_mama_arriba;
  if (dirObj >= 135 && dirObj <= 225)
     sprite_index = spr_mama_izquierda;
  if (dirObj >= 225 && dirObj <= 315)
     sprite_index = spr_mama_abajo;
  if (dirObj >= 315 && dirObj <= 45)
     sprite_index = spr_mama_derecha;
}

15
Olvidaste quitar 2 "obj_prota."; olvidando eso, ya que no se me ocurre que podria estar dando problema, intenta pasar todo ese codigo al evento draw, y en vez de usar sprite_index usas draw_sprite(). En lo general ya que no imagino porque da problema con el sprite_index, la alternativa es dibujarlo desde ese evento  :)

Otra cosa en la que estoy pensando, es que si no quiere cambiar el sprite con ese codigo entonces revisa a ver si no estas cambiando el sprite_index en otra parte del obj_mama (la mayoria de las veces no se puede cambiar sprite en un lado porque en otro ya se esta manejando).

Páginas: 1 2 3