Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

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 ... 14
1
Preguntas y respuestas / Re:Bloques que reaparecen al azar por la room
« en: Diciembre 01, 2020, 07:55:54 pm »
Nose porque este fallando, intenta cambiar el 10 por un 11, aunque si no es eso lo que falla, entonces intenta de este otro metodo
/// Donde sea que lo hayas puesto
if !instance_exists(obj_bloque)
{
  var i, posx, posy;
  i = 0;
  repeat(10) {
    posx[i] = (irandom_range(32, 416)/32)
    posy[i] = (irandom_range(32, 160)/8)
    if (i > 0) {
      while(posx[i] == posx[i-1])
       posx[i] = (irandom_range(32, 416)/32);
      while(posy[i] == posy[i-1])
       posy[i] = (irandom_range(32, 160)/8);
    }
   instance_create(posx[i], posy[i], obj_bloque)
    // Aumentar indice
    i += 1;
  }
}

2
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;
  }
}

3
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

4
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

5
Preguntas y respuestas / Re:Ayuda con las alarmas, o mensajes
« en: Noviembre 17, 2020, 04:42:51 pm »
Echizen no uses "tm" para la alarma, especifique que usaras la misma array de 2Dimensiones:
alarm[0] = text[1, con]; //Si con es el indice para cada mensaje, pues usalo
No hay nada dificil en ello, pues ya te mostre que parte de la array se usa para la velocidad de cada mensaje; solo tienes que usar esa alarma y ya

6
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

7
Preguntas y respuestas / Re:Ayuda con las alarmas, o mensajes
« en: Noviembre 15, 2020, 01:41:00 pm »
No no, mejor intenta de esta forma
y=288;
x=0;
image_xscale=8;
image_yscale=6;
tm=2;
con=0;
post=1;
text[0,0]="Felicidades, has llegado hasta aqui!";
text[1,0]=2
text[0,1]="Tuvo que haber sido duro, verdad?";
text[1,1]=2
text[0,2]="Tranquilo/a, se lo que te has estado#esforzando.";
text[1,2]=5
text[0,3]="...";
text[1,3]=2
text[0,4]="Te he estado viendo.";
text[1,4]=2
text[0,5]="Eres realmente fuerte. Mas de lo que#crees.";
text[1,5]=2
text[0,6]="Puedes descansar, te lo mereces.";
text[1,6]=2
text[0,7]="...";
text[1,7]=2
text[0,8]="Bueno, es hora de continuar.";
text[1,8]=2
text[0,9]="Tu puedes.";
text[1,9]=2
text[0,10]="Los dos sabemos de lo que eres#capaz.";
text[1,10]=2
text[0,11]="Confio en ti. Animo!";
text[1,11]=2
text[0,12]="Te esperare, asi que sigue#esforzandote.";
text[1,12]=2
text[0,13]="Falta poco."
text[1,13]=2
alarm[0]=tm;
fin="";
maxi=13;
esc=false;
Y para lo otro de que sigue con la misma velocidad, pues obvio, solo estas cogiendo el valor de un solo espacio en la array. Me imagino que para mostrar los distintos textos se usa una variable que sirva como indice, entonces busca esa variable y usala en la alarma, algo asi como:
alarm[0] = text[1, current_text] //una muestra para tener en claro la de cada texto
Te sugiero que cambies esa alarma que tienes en tu evento create y que busques la variable con la que posicionas cada texto del array

8
Preguntas y respuestas / Re:Ayuda con las alarmas, o mensajes
« en: Noviembre 15, 2020, 03:23:29 am »
Uso GM8 y eso no tiene nada que ver, de hecho... Yo diria que se debe a tu variable "text" ya que la usas como una array de 1Dimension y de 2Dimensiones.
Sugiero que lo arregles y que todos sean de 2Dimensiones fijas
text[0,0]="Felicidades, has llegado hasta aqui!";
text[1,0]=2
text[0,1]="Tuvo que haber sido duro, verdad?";
text[1,1]=2
text[0,2]="Tranquilo/a, se lo que te has estado#esforzando.";
text[1,2]=5
text[0,3]="...";
text[0,4]="Te he estado viendo.";
text[0,5]="Eres realmente fuerte. Mas de lo que#crees.";
text[0,6]="Puedes descansar, te lo mereces.";
text[0,7]="...";
text[0,8]="Bueno, es hora de continuar.";
text[0,9]="Tu puedes.";
text[0,10]="Los dos sabemos de lo que eres#capaz.";
text[0,11]="Confio en ti. Animo!";
text[0,12]="Te esperare, asi que sigue#esforzandote.";
text[0,13]="Falta poco."
Otra cosa es que debes ordenar fijamente los espacios de las array, si vas a poner un texto que sea en el primer espacio 0:
text[0, cualquier numero] = "" //El texto que quieras
Y si vas a poner una velocidad para la alarma, que sea en el espacio 1:
text[1, cualquier numero] = 2 //El numero que quieras
Ya con esos espacios ocupados, debes tener en cuenta que el orden debe ser seguido: 0-1-2-3-4-5-6-7-8-etc

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
Preguntas y respuestas / Re:Velocidad de sonic
« en: Octubre 27, 2020, 02:27:55 pm »
Saludos B_12.4

La manera mas facil seria agregandole a una variable con el tiempo, prueba creando una variable tipo "hsp" y sumarsela a la "x"
/// Event Create
hsp = 0;
maxhsp[0] = 4;
maxhsp[1] = 7;
maxhsp[2] = 9;

hithsp = 0;
hcont = 0;
htime = room_speed*3; //puse un tiempo hipotetico
/// Event Step
var kh;
kh = (keyboard_check(vk_right) - keyboard_check(vk_left));

/// Movimiento horizontal
if (kh <> 0 && !place_meeting(x+hsp, y, obj_solid) {
  if (abs(hsp) < maxhsp[hithsp])
  hsp += kh*0*5;

  image_xscale = 1+(2*(hsp<0));
  // Funciona para darle tiempo establecidos a cada aceleracion
  hcont += 1;
  if (hcont >= htime && hcont != 2) {
    hithsp = min(hithsp+1, 2);
    htime += room_speed*2;
    hcont = 0;
  }
}
else // Desaceleracion
if (hsp <> 0 && kh == 0) {
  var hx
  if (hithsp == 0)
      hx = 0.25;
      else
      hx = 0.5;

  hsp -= (sign(hsp)*hx);
  // Cambiar valores mientras se desacelera
  if (abs(hsp) > 4 && abs(hsp) < 7) {
    hithsp = 1;
    hcont = room_speed*3;
  }
  if (abs(hsp) > 0 && abs(hsp) < 4) {
    hithsp = 0;
    hcont = 0;
  }
}

/*Sumar hsp*/ x += hsp;

Creo que con lo primero de ese ejemplo de se puede lograr prácticamente lo mismo, bueno apenas acabo de pensarlo  :-[

11
Preguntas y respuestas / Re:Dibujar sólo lo que las views captan
« en: Octubre 26, 2020, 06:59:59 pm »
Se supone que nada mas se pueden notar cosas que esten dentro de la view, pero si quieres hacerlo de igual forma, entonces usa un pequeño script al principio de cada evento draw de cada objeto
///scr_InView(x, y, view)
var view; view = argument2;
return (argument0 > view_xview[view] &&
argument1 > view_yview[view] &&
argument0 < view_xview[view]+view_wview[view] &_
argument1 < view_yview[view]+view_hview[view])
/// Event Draw
if (!scr_InView(x, y, 0)) exit

12
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

13
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


14
Preguntas y respuestas / Re:Como puedo registrar un cierre en el juego?
« en: Octubre 16, 2020, 07:40:46 pm »
Alemar no existe forma de registrar eso, se supone que al presionar una tecla de esas, se ejecuta una accion al instante. En tu caso seria que se saldria del juego, simplemente se sale y ya, como la funcion de game_end() que solo sirve para ejecutar una sola cosa (la cual seria salirse del juegp), por esa razon se me ocurrio que lo hicieras una segundo antes de salirte del juego.

Si quieres registrar otras cosas, te valdria hacerlo manualmente, como... Por ejemplo...: "current_time", una variable que devuelve el tiempo transcurrido desde que se inicio el juego. Si quisieras registrar algo habria que calcularlo manualmente (por suerte existen algunas variables que sirven para devolver valores como aquel ejemplo)

15
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

Páginas: 1 2 3 ... 14