Marzo 02, 2018, 11:14:15 PM Ultima modificación: Marzo 02, 2018, 11:16:02 PM por Naitsabes0
Pues tengo 2 tipos de background, el que es un fondo absoluto, es decir una pieza, y el otro que usa tiles, es decir que se usa para crear el escenario, por lo que tiene muchas piezas.

el que usa tiles


el que es absoluto


El obj_Fondo_Menu controla el movimiento y color del fondo con código

STEP

///Movimiento de fondo
background_hspeed[0] = 2; //menú fondo
background_hspeed[2] = 2; //escenario fondo

ROOM STAR

///Color
background_blend[0] = make_colour_hsv( irandom(254), 255, 255 ); //menú fondo
background_blend[2] = make_colour_hsv( irandom(254), 255, 255 ); //escenario fondo
background_blend[3] = make_colour_hsv( irandom(254), 255, 255 ); //escenario tile


El problema es que cuando pongo el background 3 este llena de tiles el escenario, asiendo que sea imposible de ver el fondo y que ademas sea imposible distinguir el suelo de paredes, ya que repite su patrón de forma infinita en la room.

El problema.

¿que debo hacer para que solamente el background 3 cambie de color con los tiles que ya están puestos en el escenario? es decir los que puse manualmente 1 a 1 en la room.

cuando cargues el background tienes que indicar si lo quieres como tiles, entonces cuando estes en el room escoges la opcion de tiles y seleccionas el background de tiles, simplemente tepones a dibujar los tiles por encima del fondo, asi lo hago yo, sin codigo. no te compliques la vida, para eso esta la herramienta.
Es Mejor No Saber Porque Funciona, Que Saber El Porque No Funciona...
Tienes alguna duda con "Game Design" o de videojuegos en general, contactamente mas facil en twitter @pavulzavala

Cita de: somnus en Marzo 02, 2018, 11:31:22 PM
cuando cargues el background tienes que indicar si lo quieres como tiles, entonces cuando estes en el room escoges la opcion de tiles y seleccionas el background de tiles, simplemente tepones a dibujar los tiles por encima del fondo, asi lo hago yo, sin codigo. no te compliques la vida, para eso esta la herramienta.
Esta indicado como tile, solo que ambos entran en la categoria de background, el problema es que no sufre coloración al azar cada vez que inicia la room, no es que que trate de complicarme la vida, es solo que quiero que estos tile adquieran un color al azar cada vez que inicie la room por esta razón he usado el evento "ROOM STAR", pero al parecer la función

background_blend[2] = make_colour_hsv( irandom(254), 255, 255 );

No le afecta a los tiles, es por eso que provee en colocarlo como background, pero termino peor, por el momento esta como tile, pero sigue sin sufrir coloracion.

Puedes ver que es un tile.

Debes obtener los id's de cada tile y guardarlos en un arreglo o en una lista
[gml]
// lista para guardar ids de tiles
tile_list = ds_list_create();

// contador de tiles
tile_count = 0;

for (j=0; j<room_height; j+=TILE_HEIGHT) //escaneo vertical
for (i=0; i<room_width; i+=TILE_WIDTH) //escaneo horizontal
{
  tile_id = tile_layer_find(LAYER_DEPTH, i,j); //buscar tile
  if (tile_id <> -1) //si hay tile en esta posicion
  {
    ds_list_add(tile_list, tile_id); //agregar a la lista
    tile_count ++; //incrementar contador
  }
}
[/gml]
(debes cambiar TILE_WIDTH, TILE_HEIGHT y LAYER_DEPTH por los valores correctos)

Después asigna el color a cada tile
[gml]
// color aleatorio
tile_color = make_colour_hsv(irandom(254), 255, 255);

// asignar color a todas las tiles
for (i=0; i<tile_count; i++)
{
  tile_id = tile_list[|i];
  tile_set_blend(tile_id, tile_color);
}
[/gml]

Cita de: Clamud en Marzo 04, 2018, 07:32:56 PM
Debes obtener los id's de cada tile y guardarlos en un arreglo o en una lista
[gml]
// lista para guardar ids de tiles
tile_list = ds_list_create();

// contador de tiles
tile_count = 0;

for (j=0; j<room_height; j+=TILE_HEIGHT) //escaneo vertical
for (i=0; i<room_width; i+=TILE_WIDTH) //escaneo horizontal
{
  tile_id = tile_layer_find(LAYER_DEPTH, i,j); //buscar tile
  if (tile_id <> -1) //si hay tile en esta posicion
  {
    ds_list_add(tile_list, tile_id); //agregar a la lista
    tile_count ++; //incrementar contador
  }
}
[/gml]
(debes cambiar TILE_WIDTH, TILE_HEIGHT y LAYER_DEPTH por los valores correctos)

Después asigna el color a cada tile
[gml]
// color aleatorio
tile_color = make_colour_hsv(irandom(254), 255, 255);

// asignar color a todas las tiles
for (i=0; i<tile_count; i++)
{
  tile_id = tile_list[|i];
  tile_set_blend(tile_id, tile_color);
}
[/gml]
Creo que el tema se ha desviado un poco, aunque que reconozco que funciona en mapas pequeños, este código solo ara mas difícil algo que no debe requerir tanto tiempo, mis mapas tienen tamaños tan enormes que en vez de colocar tile de 1 en 1, los pongo de 4 en 4, ya que literalmente me caben mas de 1000 de ellos, seria una odisea hacerlo manualmente 1 por 1, por lo que me tome el tiempo de explicarlo de mejor manera en http://www.comunidadgm.org/preguntas-y-respuestas/cambiar-el-color-de-los-tiles-por-codigo/