Mostrar Mensajes

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

Mensajes - T789

76
Preguntas y respuestas / Re:Duda sobre DS_Map
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
[gml]
mapa = ds_map_create()
[/gml]
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
[gml]
ds_map_add(mapa, "monedas", 100)
[/gml]
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
[gml]
ds_map_add(mapa, "puntos", score);
[/gml]
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
[gml]
/// 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
[/gml]

Una mejor explicacion te la puede dar esta pagina:
https://www.aprendegamemaker.com/mapas/
77
Listo logre solucionarlo, bueno con algunas mejoras al script
[gml]
/// 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;
  }
}
[/gml]
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
78
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
[gml]
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);
}
[/gml]
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  :-[
79
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
80
Problema resuelto, acabo de encontrar una buena forma de usar posiciones aleatorias
[gml]
/// 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;
}
[/gml]
Y para cuando vaya a crear una instancia aleatoria, lo hago con una alarma
[gml]
/// 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)]
  }
}
[/gml]
81
Lo tipico es usar
[gml]
while(!place_empty(x, y))
{
  x = irandom(room_width);
  y = irandom(room_height);
}
[/gml]
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
82
Saludos Makeros, estaba modificando un antiguo proyecto Maze, y me preguntaba como podia crear un objeto en una posicion libre

Mi personaje y los enemigos se mueven verficando una posicion libre de 32×32 en la grilla, se gestionar los movimientos en la grilla y crear objetos aleatorios pero lo que nose es como crear aleatoriamente algo en la grilla

Necesito que mi objeto verifique todos los espacios de 32×32 en la grilla y ver si esta libre de otro objeto solido o si tampoco hay un personaje inteligente en ella (incluyendo a mi personaje), y que de paso la cree en cualquier grilla

Casi nunca he trabajado con grillas, a veces solo las uso para movimientos y lo demas me encargo manualmente  :-[
83
Solo usa un editor de imagenes y exportalo a .ico o simplemente usa un comvertidor en linea
84
Loading
85
Para cambiar de icono tienes que irte a la opcion de "Global Game Setting" en el apartado de Load, bueno asi se hace en la version 8 de GameMaker, no se como se hara en GMS

Sugiero uses iconos de proporciones iguales, ejemplo: 16×16, 24×24, 32×32, 48×48

Te recomendaria usar iconos de menos de 48×48 para que no se vea borroso en el ejecutable  ;)
86
Preguntas y respuestas / Re:Acciones en el el boton
Junio 28, 2020, 01:38:50 AM
Saludos OmarMakero, voy a intentar darte una soluccion pero si no funciona te sugeriria que cambies un poco tu codigo

Intenta usar lo siguiente en tu codigo al presionar la tecla enter
[gml]
if (keyboard_check_pressed(vk_enter) && presion) {
   // Intenta gestionarlo con un switch
   switch(boton)
   {
     case 0:
     if (global.lamis == 1) {
       global.Jugador = global.nom;
       global.mision = global.lamis;
       global.capa = global.cap;
       global.vidas = global.vid;
       global.vidas_maxima = global.vm;
       global.espada = global.esp;
       global.elementos = global.elm;
     }
     boton = 0; break;
     case 1:
     boton = 1; break;
     case 2:
     boton = 2; break;
   }
   presion = false;
}
[/gml]
Bueno espero te sirva, aunque me hubiera servido un poco mas saber como funciona ese codigo y una explicacion mas detallada de tu error
87
Bueno mi duda ya esta resuelta, gracias por la aclaracion
88
Ahhh para eso era el room_exists en el while pero que eso no solo te devuelve si existe la room actual, entonces deberia usar algo asi como

if (room_exists(room_next(i)))
   i = room_next(i)
89
No domino muy bien los ds_map pero si puedo reutilizar el codigo
[gml]
/// Event Create
var i, f;
i = room_first;
f = 0;
while(room_exists(i)) {
   Levels[f] = room_get_name(i);
   f += 1;
   i = room_next(i);
}
room_goto(Levels[1]);
[/gml]
Eso funcionaria bien creo pero no habra un conflicto al acabarse las rooms, digo si "i" almacena la ultima room, entonces esta ya no tendra room que almacenar pues la siguiente room a la actual no existe pues ya se acabaron, eso me ha confundido  ???
90
Hmm, podria usar algunas variables locales para determinar a que posiciones debe estar acoplado el cuadro de texto
[gml]
/// Event Draw
var x1, y1, x2, y2;
x1 = x-95;
y1 = y-32;
x2 = x+95;
y2 = y-69;

// Acoplarse segun el espacio
acoplar_cuadro(32);

draw_set_alpha(0.7)
draw_set_color(c_dkgray)
draw_rectangle(x1, y1, x2, y2, false)
[/gml]
[gml]
///acoplar_cuadro(cantidad de acoplamiento)
var rest;
rest = argument0;

if (x2 > view_wview) {
   x1 -= rest;
   x2 -= rest;
}
if (x1 < view_xview) {
   x1 += rest;
   x2 += rest;
}
if (y2 < view_yview) {
   y2 += rest;
   y1 += rest;
   y += rest; //Sumarle tambien al objeto para que no se vean fallos al dibujar
}
[/gml]

Bueno supongo hay que hacerles algunos cambios al codigo  :-[