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 - Clamud

407
Para que el código que publiqué anteriormente sea más fácil de utilizar, lo he convertido en un script
http://www.comunidadgm.org/desarrollo-de-scripts/colorear-capa-de-tiles-(blend-color)/
Puedes ver cómo funciona en el ejemplo adjunto.

En el ejemplo también se pueden cambiar los colores con un pequeño shader que escribí
[gml]
// Fragment shader
// Monochrome
//
uniform vec4 in_Colour; //(r,g,b,a)

varying vec2 v_vTexCoord;
varying vec4 v_vColour;

void main()
{
   //get pixel colour
   vec4 pix = v_vColour * texture2D( gm_BaseTexture, v_vTexCoord );
   float r = pix.r;
   float g = pix.g;
   float b = pix.b;
   
   //calculate luminance
   float m = min(min(r, g), b);
   float M = max(max(r, g), b);
   float lum = (m + M)*0.5;
   //float lum = (r + g + b)/3.0;
   
   //set new color
   if( lum < 0.5 )
   {
      r = lum * in_Colour.r;
      g = lum * in_Colour.g;
      b = lum * in_Colour.b;
   }
   else
   {
      //map lum from [0.5, 1] to [0, 1]
      lum = lum*2.0 - 1.0;
      r = (1.0 - in_Colour.r)*lum + in_Colour.r;
      g = (1.0 - in_Colour.g)*lum + in_Colour.g;
      b = (1.0 - in_Colour.b)*lum + in_Colour.b;
      //g = lum*2.0 - 1.0;
      //b = g;
   }
   gl_FragColor.rgba = vec4(r, g, b, pix.a);
}
[/gml]

Para que el shader solo cambie los colores de una capa de tiles, se deben utilizar 2 objetos: Uno con mayor profundidad que la capa de tiles para que active el shader justo antes de que se dibujen las tiles; y otro con menor profundidad para que desactive el shader justo cuando las tiles se terminan de dibujar.

Para cambiar entre los 2 métodos, presiona espacio.
408
Autor: Clamud
Versión: :GM8: :GMS:
Descripción: Establece el "blend color" de una capa de tiles.

tile_layer_blend( depth, tileWidth, tileHeight, color );
[gml]
/// tile_layer_blend( depth, tileWidth, tileHeight, color );
/*                    0      1          2           3
Estable el color de una capa de tiles.

Argumentos | Descripción
---------------------------------------------
depth      | Profundidad de la capa de tiles
tileWidth  | Anchura de las tiles
tileHeight | Altura de las tiles
color      | Color para mezclar
*/

// inicializar variables
var _tileList = ds_list_create();
var _tileCount = 0;
var _tileId, _x, _y;

for (_y=0; _y<room_height; _y+=argument2) //escaneo vertical
for (_x=0; _x<room_width; _x+=argument1) //escaneo horizontal
{
   _tileId = tile_layer_find(argument0, _x,_y); //buscar tile
   if (_tileId <> -1) //si hay tile en esta posicion
   {
      ds_list_add(_tileList, _tileId); //agregar a la lista
      _tileCount ++; //incrementar contador
   }
}

// asignar color a todas las tiles encontradas
for (_x=0; _x<_tileCount; _x++)
{
   _tileId = ds_list_find_value(_tileList, _x);
   tile_set_blend(_tileId, argument3);
}

// destruir lista
ds_list_destroy(_tileList);
[/gml]

Ejemplo
[gml]
tile_layer_blend(200, 16, 16, c_purple);
[/gml]
409
GMS necesita conectarse a internet para actualizar la licencia, no creo que exista una manera fácil de actualizar sin internet.
410
Tenemos este
https://discord.gg/2qYmwHf
pero no es muy activo.

Otro más activo es el de GamedevES
https://discord.gg/YjzEfmG
411
Cada instancia podría crear un ds_map, y cada instancia podría tener un código de identificación único (el id que se asigna automáticamente tal vez no funciona porque las instancias se podrían crear en orden diferente en cada partida). El código de identificación podría ser un número o una string.

Para guardar los datos de una instancia, convierte el ds_map en una cadena con ds_map_write, y escribe esa cadena en el archivo ini. Por ejemplo:
[gml]
data_string = ds_map_write(my_map);
id_string = string(my_id);

ini_open("save.ini");
ini_write_string("Warriors", id_string, data_string);
ini_close();
[/gml]
412
Preguntas y respuestas / Re:Desacticando instancias
Marzo 11, 2018, 02:49:59 AM
No es recomendable activar y desactivar en cada step, es mejor hacer el proceso en una alarma y/o hacer el proceso solo cuando la view cambie de posición.

En todos los casos es necesario dejar un margen fuera de la view para que no se vea el momento en que se activan o desactivan las instancias.

Una alternativa es dejar las instancias activas, pero hacer que no ejecuten código si están fuera de la view.
413
El manual menciona que el sonido se detiene, también recomienda usar una alarma con os_is_paused
[gml]
if os_is_paused() alarm[0] = 5;
[/gml]
Dentro de la alarma puedes volver a reproducir el sonido.

Otra opción es revisar en cada step y reproducir el sonido si se ha detenido
[gml]
if not audio_is_playing(sn_music)
audio_play_sound(sn_music, 1, true);
[/gml]
414
Podrías usar estados, y en cada estado usar diferentes objetos como obstáculos.
Además, si el escenario está hecho sobre una rejilla, puedes utilizar las funciones mp_grid_* que requieren menos procesamiento que las funciones mp_potential_*, pero son más difíciles de configurar.
415
Tal vez el problema está en el nombre del juego y el nombre de la ruta de instalación del JDK y SDK. Prueba eliminando vocales con acento, signos de puntuación y caracteres extraños.
416
Puedes usar un switch-case
[gml]
switch (room)
{
  case room_level_1: guia = path_Aliado_Blue_Heart1; break;
  case room_level_2: guia = path_Aliado_Blue_Heart2; break;
  // ...
}
[/gml]

Si el número de la room y de la path son iguales, puedes obtener el nombre de la room y copiar los últimos caracteres
[gml]
nom = room_get_name(room_level_1); //nombre de la room
lon = string_length(name); //longitud del nombre
num = string_copy(nom, lon, 1); //copiar ultimo caracter (un numero)
[/gml]
Entonces buscar el index de la path que tiene los mismos caracteres al final
[gml]
nom = "path_Aliado_Blue_Heart" + num; //nombre de la path
p = asset_get_index(nom); //index de la path
[/gml]
417
Debes ir a la room que quieres que se reinicie y desactivar la persistencia
[gml]
room_persistent = false;
[/gml]
Creo que sería mejor tener una estructura de datos global que guarde los ids de las instancias que no deben volver a aparecer.
418
Preguntas y respuestas / Re:Tilesets
Marzo 04, 2018, 07:40:31 PM
Puedes colocar un objeto en la zona donde se deben borrar las tiles y ejecutar algo como esto
[gml]
tile_id = tile_layer_find(DEPTH, x,y);
if (tile_id <> -1) tile_delete(tile_id);
[/gml]
419
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]
420
A partir de ahora evitaré hacer actualizaciones.