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 ... 13
1
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


2
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)

3
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

4
 :'(  :'(  :'(  :'(  :'(  :'(
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...  :-\

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

6
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).

7
Espera un momento... ¿El sprite que querias cambiar era el de la madre? Si es asi entonces quita el "obj_prota." de todos los sprite_index, ya que solo va cambiar su propio sprite

Si ese es todo el caso, entonces no hace falta usar el "bloque.hijo = id". Lo otro que iba decir es que el "48" en los place_meeting() eran solo de prueba, asi que puedes especificar mejor los pixeles (podrias intentar con el tamaño sumado del radio que seria: 10, pero mejor prueba vos)

8
Saludos Alemar5

Tengo 2 soluciones para ti
La primera: para que la colision sea mas precisa, debes cambiar el penultimo argumento a true de la funcion "collision_circle" (asi se verificara una colision mas precisa en el circulo, y de paso, para no tener problemas, sugiero que tengas marcada la casilla de precise en la máscara de colisión del sprite en comun)

La segunda: sugiero que le añadas una variable al obj_mama y que contenga el id del player, algo asi como: "bloque.hijo = id" y todo eso en el primer codigo
/// Event Step obj_mama
if instance_exists(obj_textbox) {
   if place_meeting(x-48, y, hijo)
      hijo.sprite_index = //Sprite mirando a la derecha
   if place_meeting(x+48, y, hijo)
      hijo.sprite_index = //Sprite mirando a la izquierda
   if place_meeting(x, y-48, hijo)
      hijo.sprite_index = //Sprite mirando abajo
   if place_meeting(x, y+48, hijo)
      hijo.sprite_index = //Sprite mirando abajo
}
Y eso solo pasaria si ya fue creada una instancia de obj_textbox. Espero te funcione, la verdad es que todo me lo acabo de pensar

9
Oh si... Eso sucede porque si no hay una instancia enemiga, entonces solo se estaria dibujando con el angulo .x de una variable con un id vacio. Solucionalo facilmente verificando primero si hubo colision en el circulo
/// Event Draw
var inCircle;
inCircle = collision_circle (x, y, rango, o_e1, 0, true);
if (inCircle)
  distObj = inCircle //Devolver el id de la instancia que entro en el rango del circulo de colision

// Detectar si paso el radio
if (distance_to_object(o_e1) < rango)
  draw_sprite_ext(sprite0, 0, x, y, 0.75, 0.75, point_direction(x, y, distObj.x, distObj.y), c_white, 1)
  else
  draw_sprite_ext(sprite0, 0, x, y, 0.75, 0.75, direction, c_white, 1)
Tambien sugiero que añadas la variable distObj en el evento create y que le des un valor predeterminado de "direction" para evitar que cuando no haya colision en el circulo simplemente muestre ese valor o... Si ya hubo una colision simplemente cuando el enemigo salga ya tendrias una direccion antigua

10
Saludos Momoni

El problema esta en el evento draw, mas que nada cuando dibujas el sprite, si mal no veo estas usando la funcion point_direction para coger la direccion entre tus (x, y) y las (distancia.x, distancia.y). Ahi es donde radica el problema, pues la funcion "distance_to_object()" que usas en el evento step, solo almacena la distancia no el id del objeto. Sugiero que lo hagas dandole el valor de otra funcion: "collision_circle()" y de paso te puedes ahorrar lo del evento step en el evento draw
/// Event Draw
var distObj;
distObj = collision_circle (x, y, rango, o_e1, 0, true); //Devolver el id de la instancia que entro en el rango del circulo de colision

// Detectar si paso el radio
if (distance_to_object(o_e1) < rango)
  draw_sprite_ext(sprite0, 0, x, y, 0.75, 0.75, point_direction(x, y, distObj.x, distObj.y), c_white, 1)
  else
  draw_sprite_ext(sprite0, 0, x, y, 0.75, 0.75, direction, c_white, 1)
De esta forma puedes hacerlo mas lite xD

Por cierto si te preguntas como trabaja la funcion de "collision_circle", ajunto su documentacion:
https://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_circle.html

11
Preguntas y respuestas / Re:Trazar un dibujado con el mouse
« en: Octubre 09, 2020, 05:04:26 pm »
Gracias por la sugerencia. Tuve que hacer algunas cosillas extras pero igual funciono correctamente. Por cierto cuando dijiste que no podias imaginartelo correctamente, creo que tenias razon, a veces no suelo expresarme perfecto cuando trato de describir una idea; mejor lo hago con una imagen aclaratoria:



Tambien queria preguntar ¿si no habia una forma mas suave para intercalar los puntos entre lineas? Pues noto que algunos puntos (especificamente los ultimos puntos) suelen lagearse o no calcular muy bien las aproximaciones cercanas del mouse. Pero de paso las listas funcionaron bien ("me pregunto como se verian las lineas, si GameMaker gestionara vectores" ;))

12
Saludos Zorropa

Lo que pides es algo que se puede verificando facilmente. Simplemente crea una variable que gestione si esta abierta o no, lo puedes hacer desde el mismo objeto puerta
/// Evento Create obj_puerta
abierta = false;

// Crea una instancia del interruptor en cualquier cordenada de la room, y almacena el id de la puerta en ella para que asi pueda manejarla
with(instance_create(xx, yy, obj_interruptor));
   Mipuerta = other.id;
Ahora simplemente añade en el objeto interruptor, una condicion para abrir la puerta que nos creo (servira mejor creando el interruptor desde el objeto puerta). Usare como ejemplo el evento colision
/// Evento Collision con el obj_jugador
if (Mipuerta.abierta == false) //Solo abrira nuestra puerta, si esta cerrada
   Mipuerta.abierta = true;

Ahora, si te preguntas como poder crear los interruptores en distintas parte de la room sin tener que crear otra puerta... Pues simplemente añade una variable unica, en el "creation code" de la instancia de la puerta añadida en la room
xx = 320; //Posicion x donde crear mi interruptor
yy = 240; //Posicion y donde crear mi interruptor
Si lo notaste bien, al principio de este tema (en la parte donde creamos el interruptor), creamos la instancia del interruptor con los valores de esas variables unicas, que serian "xx" "yy"

Bueno espero que te sirva este metodo

13
Preguntas y respuestas / Re:dudas de views para un juego pixel art
« en: Octubre 08, 2020, 03:37:41 am »
Saludos S4BAT

¿Podrias especificar un poco mas? Hay 2 formas de agrandar la pantalla con las view. La primera es manualmente desde la pestaña view del editor de room; y la segunda es por medio de las variables de la view

Quieres agrandarlo segun lei, podrias hacerlo duplicando "el port de la view"
Digamos que tu room tiene unas proporciones de...
Código: [Seleccionar]
room_width = 320;
room_height = 240;
Asi que solamente agranda los valores en el port a 320*2 = 640, 240*2 = 480. Podrias probar cambiando a otros valores mas grandes, pero siguiendo las proporciones originales.
Sugiero que mantengas a tus sprites en proporciones iguales, ya que en la mayoria de casos suelen deformarse algunos sprites y/o verse los pixeles arruinados (a mi me pasa que suelen perderse o borrarse algunos pixeles de un sprite)

Tambien podrias intentar cambiando el tamaño de la ventana del juego (es una forma mas y casi no suelen dañarse pixeles, bueno en el GM8 se ve borrosa la pantalla pero en el GMS no se ve borrosa) con la funcion:
window_set_size(room_width*2, room_height*2)
window_center() //centrar ventana para evitar problemas
Bueno... No se si todavia exista esa función en GMS

14
Preguntas y respuestas / Trazar un dibujado con el mouse
« en: Octubre 05, 2020, 11:35:08 pm »
Saludos makeros

Estoy trabajando en un juego que seria una implementacion de mecanicas entre:
-PointAndClick
-Survival Horror
-Accion

Antes de trabajar en lo demas, quisiera trabajar en un sistema de pelea unica, y se me ocurrio un tipo de sistema el cual seria un objeto de onda que empezara pequeño y fuera creciendo hasta un punto, del cual retrocederia hasta ser tan pequeño y volver a aparecer en otro punto aleatorio de la pantalla.

El objeto de onda para atacar, solo estaria limitado de la mitad de la pantalla para abajo, y para arriba solo se mostraria al enemigo acercandose
/// Event Create obj_enemyBatle
Owidth = sprite_get_width(spr_onda)/2;
Oheight = sprite_get_height(spr_onda)/2;

mionda = instance_create(irandom_range(Owidth, room_width-Owidth), irandom_range(room_height/2 + Oheight, room_height-Oheight), obj_ondaAtack)
Ya casi tengo todo el sistema de onda para atacar, pero hay un incomveniente... No se como lograr para atacar

La forma que tengo en mente para atacar, requiere en trazar un dibujado mientras dejo oprimido el boton izquierdo del mouse; para que se muestre el trazado solo uso un objeto de color rojo con 1 pixel de ancho y largo. El problema en si, esta en que solo se puede crear instancias de color si el mouse va lento (cuando digo lento, me refiero a casi tocar el mouse)

No encuentro una forma de poder trazar un dibujo pues el mouse siempre va muy rapido, y me disgusta que aquel que vaya probar el juego tenga que estar forzado a llevar lento el mouse; lo intente todo desde usar bucles para crear instancias precisamente, pero como sucede que el trazado siempre se tiene que crear en el mouse nunca funciona

Ahora, quisiera pedir su ayuda para saber como trazar un dibujo preciso sin tener que preocupar por como se lleve el mouse

La idea esta en cuando el efecto de onda detecte una instancia de dibujo, se vuelva a crear en otra parte aleatoria y le descuente una vida hasta ser destruido junto con su enemigo (tambien se borraria el trazado automáticamente)

15
Desarrollo de Scripts / Dibujar Ring ahuecado (Only Loop)
« en: Octubre 05, 2020, 06:33:18 pm »
Nombre del creador: T789
Descripcion del script: Funciona para dibujar un anillo ahuecado por medio de un bucle
Versión GM utilizadas: GameMaker 8
Argumentos:
Código: [Seleccionar]
xx: posicion x donde dibujar
yy: posicion y donde dibujar
ra1: primer radio a establecer (cuenta como el radio interior -el hueco del anillo)
ra2: segundo radio a establecer (esto define el tamaño a alcanzar
col: color para el anillo

///draw_ring(x, y, ra1, ra2, col)
var xx, yy, ra1, ra2, col, i;
xx = argument0;  yy = argument1;
ra1 = argument2;  ra2 = argument3;
col = argument4;  i = 0;

repeat((r2-r1)*4) {
   draw_circle_color(xx, yy, r1+i, col, col, true)
   i += 0.25;
}
/// Event Draw
draw_ring(x, y, 4, 8, c_yellow)

Páginas: 1 2 3 ... 13