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

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 4 ... 12
16
Preguntas y respuestas / Duda sobre "X Y" y "Direction"
« en: Agosto 18, 2020, 07:02:38 pm »
Hola Makeros, como ya vieron en el titulo, tengo algunas dudas sobre el uso de las posiciones X e Y y la direction

Mi Razonamiento Basico:
Cuando hago un juego, uso las posiciones X e Y paras darle movimiento a mi personaje y a cualquier otro de forma horizontal y vertical. Ya que usar hspeed = 4 en un evento create es lo mismo que sumar 4 a X en el evento step
/// Evento Create
hspeed = 4 //derecha
vspeed = -4 //izquierda

/// Evento Step
x += 4 //derecha
x -= 4 //izquierda
y += 4 //abajo
y -= 4 //arriba
Todos conocemos que al sumarle 4 seria positivo y eso indica a la derecha y restarle es negativo a la izquierda

De esa forma le doy movimiento a mi persona o a cualquier otro. Con la direction tambien entiendo el movimiento
// 0/360 = derecha, 90 = arriba, 180 = izquierda, 270 = abajo
direction = 270;
speed = 4;
Las 2 formas son realmente buenas para dar movimiento en general pero cuando hago un proyecto, solo me enfoco en una a la hora de programar para no confundirme con sus significados

Hay veces que veo algunos codigos que emplean ambos metodos y suelo entenderlos un poco por la forma en que lo usan. Por ejemplo el siguiente codigo es para rotar un objeto:
direction += 4;
x = obj_sphere.x + lengthdir_x(64, direction)
y = obj_sphere.y + lengthdir_y(64, direction)
Pero me confunde... Ya entiendo para que pero no el como, la funcion lengthdir_ te devuelve el angulo y la longitud a la que asignar la X o Y dependiendo de las propiedades, pero mi concepto no me deja entender muy bien la logica

Otro ejemplo es el de crear la bala segun la direction
/// Event Step obj_player
if (keyshoot && ammo > 0)  {
   with(instance_create(x, y, obj_bullet) ) {
      direction = image_angle;
      speed = 7;
   }

/// Event Create obj_bullet
x = x + (2*hspeed);
y = y + (2*vspeed);
La parte de la bala me confunde un poco; tambien hay otros ejemplos en juegos 3D que he visto y que no entiendo

Seria mas facil poner lengthdir_ en vez de eso y ya lo he hecho. Normalmente no le prestaria mucha atencion a eso y simplemente seguiria haciendo lo que llevo pero muy seguido he intentado hacer un 3D ligero y al llegar a la parte en la que me topo con alguna X sumandole una direction y..., en fin, hay mas dudas que resaltaria pero me tardaria mucho mas, asi que lo dejare hasta ahi

Disculpa si no se entendieron mis ejemplos o si las dudas no quedaron claras

17
Preguntas y respuestas / Re:Instance_destroy ()
« en: Agosto 17, 2020, 09:41:41 pm »
Ahh... Te refieres a una instancia en particular ¿no?

para ello usas el numero de instancia unica que quieres destruir
with(10001)
  instance_destroy()
Eso destruira sola a esa instancia, tambien puedes manejarlo en una variable depende de como lo quieras destruir, por ejemplo si colisionas, si esta cerca tuyo, o si no le queda vida, etc

Si quieres hacerlo con una en particular, simplemente busca su id en el editor de room, pero puede ser un poco fastidioso; asi que si quieres destruirlo segun los ejemplos anteriores, solo usa funciones que devuelvan id. Un ejemplo para colisiones es:
/// Dentro de una bala
enemy = instance_place(x, y, obj_enemy)
if (enemy) {
  with(enemy) {
    vida -= 1;
    if (vida <= 0) instance_destroy()
  }
}

18
Preguntas y respuestas / Re:que el codigo afecte solo a una instancia
« en: Agosto 17, 2020, 04:21:23 am »
Ups creo que me confundi un poco  :-[

Otra forma mas rapida y ligera de hacerlo es con la funcion instance_place(), que tambien devuelve el numero de la instancia con la que colisionas
with(instance_place(x+sign(image_xscale), y, obj_buster))
{
   hsp = 0;
   if (image_xscale == -1)
      direction = 45;
      else direction = 135;
      speed = 5;
}
Y esa es otra forma de reutilizar el with()

19
Preguntas y respuestas / Re:que el codigo afecte solo a una instancia
« en: Agosto 17, 2020, 04:11:48 am »
Asi esta mucho mejor  :-[, ya que usas el with(), porque no pruebas a usar la instancia en vez del objeto en si. Supongo que cuando creas una bala, esta la almacenas en una variable y si ese es el caso entonces porque no la usas en el with()
if (place_meeting(x + sign(image_xscale), y, obj_buster)) {
    with(bullet) {
        hsp = 0;
        if (image_xscale = -1)
            direction = 45;
            else direction = 135;
            speed = 5;
    }
}
Y si lo que haces es crear balas independientes pues... te sugiero agregarla a una variable normal
bullet = instance_create(x, y, obj_buster);
Otra duda que tengo, ¿es que si ese codigo lo colocas en el obj_buster? Pues si asi es entonces dejame decirte que se derrocha para nada ese with()

20
Preguntas y respuestas / Re:que el codigo afecte solo a una instancia
« en: Agosto 17, 2020, 03:37:04 am »
¿Podrias mostrar un poco tu codigo para entender mejor?, por lo que dices, si una rebota todas las instancias lo hacen

Por casualida no te estas referiendo al objeto mismo con un with(), igual sugiero que muestres un poco el codigo que usas, de esa forma sabriamos en que esta fallando  ???

21
Preguntas y respuestas / Re:Colorizar un sprite a negro poco a poco
« en: Agosto 06, 2020, 08:45:00 pm »
Gracias por la sugerencia, no conocia esa funcion de GameMaker, bueno claro tendre que usarla en el evento draw para no hacerlo en todos los sprites
var shadow;
shadow = make_color_hsv(0, 0, fs);
draw_sprite_ext(spr_live, 0, x, y+8, 1, 1, 0, shadow, 1)

22
Preguntas y respuestas / Colorizar un sprite a negro poco a poco
« en: Agosto 06, 2020, 03:46:42 pm »
Saludos makeros, tengo una duda que todavia np he planteado y es: como puedo colorizar una imagen poco a poco a un colorar, no necesaria mente tiene que ser negro.

Veran conozco como reducir y aumentar el alpha y ahora quisiera aprender a colorizar un sprite (empezando por negro); normal lo hago simple con el alpha
if (hurt == maxhurt)
   alpha = max(0.4, alpha-0.025);
if (hurt == minhurt)
   alpha = max(0.65, alpha-0.05)
Eso funciona muy bien para reducir el alpha segun el daño pero ahora lo que quiero es colorizarlo poco a poco y desafortunadamente la variable image_blend solo lo hace de una forma image_blend = c_black; y sumandole, no creo que funcione

Asi que quisiera solo colorizarlo al igual que con el alpha, nose algo parecido a la opcion de "intensity" en el editor de sprite  ???

23
Preguntas y respuestas / Re:Como hacer un menu usando Arays 3D.
« en: Agosto 06, 2020, 03:32:28 pm »
3dgeminis dehecho la nueva beta de GameMakerStudio 2 permite multiples tipos de array usando varios corchetes a la vez
menu[0][0][1] = "";
Claro no creo que el use esa beta, asi que la idea de usar ds_grids puede ser la mejor opcion; de cualquier forma ¿que tipo de menu planea hacer para usar una array tan grande?

24
General / Como y a que Edad Conocieron GameMaker
« en: Julio 05, 2020, 08:53:21 pm »
Hola Makeros, Como muchos yo he conocido GameMaker para hacer mi propios videojuegos, bueno no lo he logrado todavia pero aun me acuerdo mi primera vez y recuerdo la motivacion que tenia en ese momento

Como olvidarlo, tenia 15 años y estaba viendo fangames de Sonic en Youtube, mientras buscaba otro video, aparecio un video curioso de "Como crear un Juego de Sonic en GameMaker", y como en la descripcion decia que no se requeria programar

Bueno en retrospectiva fue una completa mentira y ese fangame nunca se termino pero no lo deje botado, segui por 3 meses viendo Tutoriales de Adderly Cespedes hasta que finalmente me di cuenta que si queria hacer algo bueno pues tenia que programar  :-X

2 años despues y aqui estoy con un mayor conocimiento en la programacion pero sin haber logrado nada xD

Bueno llevo desde los 6 años interesado, asi que menos pienso dejarlo botado, en fin no voy a dar mas recuento pues si no, terminare acaparando este Tema  :-[

25
Preguntas y respuestas / Re:Duda sobre DS_Map
« en: Julio 05, 2020, 05:35:04 pm »
Yo hace menos de 3 semanas que acabo de empezar a usar Estructuras de Datos y lo que mas me llamo la atencion fueron los Ds_maps

Si conoces los ficheros .ini, supongo ya te podrias hacer una idea mas clara, los mapas son como los inis, primero creas el mapa usando
mapa = ds_map_create()
Luego le das un valor en la llave que quieras guardarlo, que puede ser numerica o de cadena, sugiero empieces usando llaves de cadena para adaptarte
ds_map_add(mapa, "monedas", 100)
El valor en una seccion del mapa puede ser tanto una string como un valor real, incluso puedes usar una variable y almacenar ese valor en las distintas secciones de un mapa, un ejemplo seria
ds_map_add(mapa, "puntos", score);
Usar la misma variable de score funciona, puede que no lo captes al principio pero con un mapa puedes almacenar distintos valores en una misma variable(mapa) usando las llaves como los espacios en los que quieres almacenar los valores

Existen muchas funciones utiles para manejar y trabajar con los mapas, algunas de ellas pueden ser realmente utiles, por ejemplo
/// Funciones para el manejo de los mapas
ds_map_replace(mapa, "puntos", score/2) // Esta Remplaza el valor de una seccion, pues con la otra funcion solo añades y puede que no quieras sumarle en concreto
ds_map_find_value(mapa, "pociones") // Esta funcion te ayuda para saber el valor de una seccion(llave) en el mapa
ds_map_delete(mapa, "valores") // Esta funcion es para borrar la llave y su valor del mapa, por si quieres liberar algo de espacio
ds_map_clear(mapa) // Esta en vez de borrar una seccion, solo vacia el mapa entero sin borrarlo
ds_map_destroy(mapa) // Esta si borra el mapa completo, por si no quieres que el mapa perdure al destruir el objeto

Una mejor explicacion te la puede dar esta pagina:
https://www.aprendegamemaker.com/mapas/

26
Listo logre solucionarlo, bueno con algunas mejoras al script
/// Event Create
var i, b, sprite;
b = 0;
sprite = sprite_create_from_screen(0,0,1,1,0,0,0,0)
sprite_delete(sprite)
for(i=0; i<sprite; i+=1) {
  if sprite_exists(i)
  {
    sprite_save_strip(i, "sprite"+string(b)+".png");
    b += 1;
  }
}
Pero por alguna extraña razon no me guardaba los sprites cuando le ponia sprite_get_name(), asi que lo hice nada mas con el id de los sprites, alguien me puede explicar porque cuando lo hago manualmente usando el nombre si lo guarda pero cuando lo hago recorriendo con un for no lo guarda ???

Bueno de todas formas ya lo solucione y de paso aprendi mas sobre los id que tiene cada recurso en GM, cosa curiosa es que puedo usar draw_text(x, y-15, spr_ball_yellow) para saber el id y no solo con sprites, tambien con otros recursos

En fin estoy muy intrigado XD

27
Saludos Makeros, estaba viendo un viejo proyecto hecho en GMS 1.2 y me preguntaba como podia exportar los sprites pues por alguna extraña razon no me aparecia la opcion de save sprites que tengo en GM8, se me ocurrio la idea de exportarlas por medio de codigo

Estuve investigando algunas funciones para el manejo de los sprites y creo que lo hice de muy mala forma o es que use las funciones equivocadas
var sprite, i;
i = 0;
sprite = sprite_get_name(i);
while(sprite_exists(sprite)) {
   sprite_save_strip(sprite, "sprite"+string(i)+".png")
   i += 1;
   sprite = sprite_get_name(i);
}
Pues al principio funciona pero por alguna extraña razon solo me guarda el primer sprite que tengo en el proyecto, los demas no se guardan y termina guardando una y otra vez el mismo sprite

Alguna sugerencia  :-[

28
La verdad que si lo habia considerado y tambien hay que poner eso en el instance_create para hacerlo aleatorio, igual gracias por la sugerencia

29
Problema resuelto, acabo de encontrar una buena forma de usar posiciones aleatorias
/// Event Create
var px, py;
px = 0;
py = 0;
// Almacenar posiciones x
repeat(room_width/32) //Se repetira segun las casillas horizontales del room
{
  xpos[px] = px*32;
  if (px != room_width/32) px += 1;
}
// Almacenar posiciones y
repeat(room_height/32) //Se repetira segun las casillas verticales del room
{
  ypos[py] = py*32;
  if (py != room_height/32) py += 1;
}
Y para cuando vaya a crear una instancia aleatoria, lo hago con una alarma
/// Alarma 0
var rx, ry;
rx = irandom(room_width/32);
ry = irandom(room_height/32);
bonus = instance_create(xpos[rx], ypos[ry], obj_bonus)

// Ajustar bonus a una posicion libre
with(bonus) {
  while(!place_empty(x, y))
  {
    x = other.xpos[irandom(room_width/32)]
    y = other.ypos[irandom(room_height/32)]
  }
}

30
Lo tipico es usar
while(!place_empty(x, y))
{
  x = irandom(room_width);
  y = irandom(room_height);
}
Pero eso solo me dara una posicion en cualquier lugar libre y lo que yo necesito es una posicion de 32×32 pixeles, cuando dijiste que lo hiciera buscando un espacio entre 1 y 32, como sugeririas que lo hiciera y de que forma deberia usar esos valores almacenados  ???

La verdad tenia la idea de crear objetos de grilla y almacenar sus puntos de anclajes en una lista pero eso tardaria, en especial la parte de añadir los objetos en cada parte de las rooms

Páginas: 1 2 3 4 ... 12