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

Autor Tema: Invetir componentes de un color  (Leído 468 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado NiuWeb

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2825
  • Mensajes: 1.697
  • Agradecido: 141 veces
  • Sexo: Masculino
  • Rock anthem for saving the world.
    • Ver Perfil
en: Noviembre 17, 2018, 07:37:03 pm
Autor: NiuWeb.
Versión de GM: Studio 1.4.9999.
Descripción: Invierte los componentes de un color representado como número entero. Es decir, el componente rojo pasará a ser azul, y viceversa.

Resulta que en la versión 1.4.9999 las funciones effect_create_below() y effect_create_above() tienen un error que les hace interpretar los colores al revés.

Es decir, este código de aquí:
effect_create_above(ef_firework, 128, 128, 0, c_orange);
effect_create_below(ef_firework, 256, 128, 0, c_teal);

effect_create_above(ef_firework, 128, 256, 0, c_blue);
effect_create_below(ef_firework, 256, 256, 0, c_red);
Muestra en pantalla esta locura:


Código: El problema se puede solucionar con este código.
///color_rgb_fix(color);
//Invierte los componentes del color dado

//Obtener componentes iniciales
var red   = argument0 & 255;
var green = (argument0 >> 8) & 255;
var blue  = argument0 >> 16;

//Rehacer el color
return (red << 16) | (green << 8) | (blue);

Ejemplo:
Esta sería la versión corregida de las constantes de color, para usar con estas funciones:
aqua    = color_rgb_fix(c_aqua);
black   = color_rgb_fix(c_black);
blue    = color_rgb_fix(c_blue);
dkgray  = color_rgb_fix(c_dkgray);
fuchsia = color_rgb_fix(c_fuchsia);
gray    = color_rgb_fix(c_gray);
green   = color_rgb_fix(c_green);
lime    = color_rgb_fix(c_lime);
ltgray  = color_rgb_fix(c_ltgray);
maroon  = color_rgb_fix(c_maroon);
navy    = color_rgb_fix(c_navy);
olive   = color_rgb_fix(c_olive);
orange  = color_rgb_fix(c_orange);
purple  = color_rgb_fix(c_purple);
red     = color_rgb_fix(c_red);
silver  = color_rgb_fix(c_silver);
teal    = color_rgb_fix(c_teal);
white   = color_rgb_fix(c_white);
yellow  = color_rgb_fix(c_yellow);
Y así, cuando necesitemos usar constantes de color en las funciones de efectos, no usaríamos c_yellow sino yellow, por ejemplo.

Así que, el código que puse al principiose corregiría de esta forma:
effect_create_above(ef_firework, 128, 128, 0, orange);
effect_create_below(ef_firework, 256, 128, 0, teal);

effect_create_above(ef_firework, 128, 256, 0, blue);
effect_create_below(ef_firework, 256, 256, 0, red);
Y en pantalla:


El tiempo era tu aliado, humano, pero te ha abandonado.
Los Forerunners han regresado, esta tumba ahora es tuya.

-Ur-Didacta.


BA:STFW&RTFM
 


No Tienes Permisos Para Dar Puntos
point 20 Puntos

Usuarios que puntuaron el tema » Johann (10 Pts) » eduardo960 (10 Pts) 


Desconectado kostra

  • Legendario
  • *
  • Puntos: 2436
  • Mensajes: 2.020
  • Agradecido: 86 veces
  • Sexo: Femenino
  • Sé literalmente el sentido de la vida.
    • Ver Perfil
Respuesta #1 en: Noviembre 17, 2018, 08:01:47 pm
Como te complicas la vida xDDDDD igual gracias xd

"ola k ase clickarme o k ase"
la imagen no se quita xD
 


Desconectado Marth

Respuesta #2 en: Octubre 06, 2019, 08:28:00 pm
En GMS2 he visto ese error.
Habra que reportarlo a YoYoGames.

Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas.

-Linus Torvalds ("Padre" de Linux)-