Noticias

¡Ayuda a la Comunidad GM, haz una donación!

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.


Temas - NiuWeb

Páginas: 1 2 3 ... 8
9
Desarrollo de Scripts / Invetir componentes de un color
« 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:


10
General / Algunos proyectos incompletos con funcionalidades interesantes.
« en: Noviembre 03, 2018, 02:58:17 am »
Buenas.
Hace ya rato que no me pasaba por aquí, y he vuelto simplemente para hacer públicos algunos proyectos incompletos con funcionalidades interesantes que he hecho a lo largo del año.

No son muchos, ni los tengo bien documentados. Hablando del código en sí, digamos que están decentemente organizados y entendibles, pero no tengo escrita ninguna guía que explique detalladamente su funcionamiento, ni tengo planeado hacerla.

No los voy a subir de una vez todos, estoy arreglando un par de cosas y los iré subiendo de a poco en este mismo post.

Sin nada más que decir, aquí van:

1. Caja con contenido deslizable.
El elemento de interfaz ideal para dispositivos móviles. Se trata de un contenedor al que le puedes adjuntar cualquier tipo o cantidad de objetos (con ciertas características) y arrastrar con el cursor (o propiamente dicho, el dedo) consiguiendo el famoso efecto de deslizamiento con desaceleración.

deslizables.gmz

NOTA
Ese proyecto tiene otras funcionalides extra, como adaptabilidad a la pantalla (para reducir el coste de procesamiento) y un sistema de "click por capas", para evitar que se seleccione un objeto si tiene encima a otro, pero esas cosas las arreglaré un poco mejor y las subiré en otros archivos después.


1. Plataformero híper-simple.
Pues eso, un sistema "en blanco" de colisiones y saltos de estos típicos en plataformeros. Todas las propiedades del sistema son configurables (gravedad, velocidades, teclas de control e incluso la cantidad de saltos que se pueden hacer sin tocar el suelo). Viene por defecto configurado para un "quíntuple salto" xd, pero se puede cambiar v:

Plataformero.gmz

Ya veré cuándo continúo subiendo.
Saludos.

(si algún moderador ve que este post iría mejor en otra parte, agradecería lo moviera).

11
Traducción de la documentación de GameMaker: Studio
Solicito colaboradores
(Mira ese tamaño para no morir ignorado xd)

¡Muy buenas!
Como sabrán, uno de los elementos más importantes para aprender a utilizar cualquier cosa, o por lo menos guiarse, es el manual. En el caso de los progamadores, una referencia del lenguaje de programación que usen es vital para poder desarrollar cómodamente.

Éste es un foro de Game Maker, y como foro de Game Maker que es, sus usuarios utilizan mucho la programación GML. El manual que este foro tiene en español acerca del GML es de hace muchísimo tiempo, para con versiones muy antíguas de GM, y por ello hay demasiada información de las versiones modernas que se le escapa. No sólo eso, el manual oficial de GM: Studio, cuan larguísimo que es, se encuentra totalmente en inglés, factor que aunque a los usuarios más experimentados no suponga un problema mayor, siempre es una dificultad por más pequeña para aquellos sin tanto conocimiento, o siquiera eso, pues es mucho más fácil entender un manual en nuestro idioma nativo.

Con esto en mente, yo decidí comenzar a traducir el manual del GM:S, de esto hace más de un año. Comencé a trabajar sólo durante un tiempo, hasta que se me ocurrió la idea de pedir ayuda a más gente de aquí en un post (como éste) para avanzar más rápido y mejor.  Dicho post pasó bastante desapercibido (como tal vez le pase a éste :v) y sólo conseguí que un usuario me ayudara. Junto a este usuario traducimos un par de cientos de funciones y variables, pero por unos problemas no pude continuar trabajando en el proyecto, así que quedó pausado.

...Hasta ahora. Hace un mes decidí terminar lo que empecé, primero por respeto a aquel usuario que se esforzó para colaborar en esto, y segundo por la ilusión que me hace a mí (y tal vez a él) ver todo el manual del GMS traducido por usuarios de este foro.

El manual, con las ahora 436 sentencias que tiene traducidas, y ahora clasificadas en secciones con información, está siguiendo adelante, y no se detendrá hasta completarse. Pero, hay un pequeño gran problema: Y es será imposible para mí terminar el proyecto sólo, hay muchas cosas del GML que sobrepasan mis conocimientos, y además hay mucha, muchísima y demasiada tela para cortar; hay cientos de secciones y miles de artículos individuales en el manual oficial. Y ésta es la razón principal de este post, así que iré al grano:

Necesito gente que participe en este proyecto.
Busco colaboradores que, por puro altruismo y voluntad (es decir, no hay pago, es un proyecto para todos), desee ser partícipe en la traducción del manual de GameMaker: Studio, y que pueda aportar de su conocimiento de este programa a todo el mundo.

La mecánica sería muy sencilla: Quien desee colaborar en la traducción, mándeme un mensaje privado con su correo electrónico, para añadirle en las redes sociales que usaremos para comunicarnos: Trello y Slack.

En Trello
Colgaremos nuestros avances y progresos en la traducción. Véase, qué estamos traduciendo, qué traduciremos y qué hemos traducido. Para mantener un orden.

En Slack
Nos comunicaremos directamente. Será el canal por donde hablaremos entre nosotros.

Los detalles específicos los daré cuando los traductores nos reunamos en dichas redes sociales.

Lo ideal sería que las personas que trabajemos en esto tengamos conocimientos de Game Maker que podamos aportar. Aún si no posees conocimientos avanzados de GML, hay muchas otras partes del manual oficial que requieren traducción, como las secciones de Using GameMaker: Studio, o Advanced Use, las cuales no hablan de temas muy avanzados de GML. Obviamente, será necesario tener un nivel de inglés técnico suficientemente bueno para entender lo que dicen los artículos originales del manual, términos propios del GM, por ejemplo. Otra cosita es la cuestión de escritura: Lo ideal sería que los artículos traducidos tengan una buena redacción para ser entendibles.

El manual será hospedado en un blog con tecnología Blogger, pues es una herramienta que facilita muchas cosas, y elimina problemas que atrofiarían el proyecto, como el molesto ancho de banda, o la seguridad. De todas formas ya tengo todo preparado para que sea muy sencillo traducir las cosas, evitando complicaciones.

Como digo, me hace mucha ilusión que el manual en español de GM: Studio saliera de Comunidad GM, este foro que quiero tanto :3 xD.

Y eso sería todo. El manual está alojado aquí: http://docs-gamemaker-es.blogspot.com

EDIT (02/12/17):  El manual se ha mudado de servidor, ahora está en esta URL: https://bygdle.xyz/gamemaker/manual/

Ojalá este post no muera en el olvido. :(.

PD: Ya lo había publicado, pero se había bugeado así que lo resubo.

Colaboradores actuales
Ya hay algunas personas que han decidido unirse al proyecto.

  • Alesxanderk
  • SeirLord Games
  • Zapdos43
  • Clamud
  • Kostra (MHP Labs)
  • Brunoxzx

Ojalá se unan más personas.

12
General / GMLight JS - Resaltador de síntaxis GML para tu sitio web.
« en: Septiembre 23, 2017, 05:19:16 am »
GMLight JS
Fase BETA
Resaltador de síntaxis GML en JavaScript

¡Buenas! Vengo a presentarles un pequeño proyectico que he hecho, y que podría ser útil a aquellos desarrolladores GM que quieran publicar sus códigos en internet. Se trata de una sencilla librería en JS que se puede insertar en un sitio web para resaltar la síntaxis de GML con estilos cómodos para la vista y totalmente personalizables. Permite resaltar perfectamente funciones, variables, constantes, comentarios de una línea y multilínea, números y cadenas de texto sin problemas.

La librería es gratuita y está totalmente documentada en su sitio web. Denle una mirada :).


Una muestra de lo que puede hacer (clic para ver en tamaño completo):


Obviamente las imágenes están tomadas desde el sitio web, el resaltador on-line.

PD: En el sitio se puede probar el resaltador on-line, por si quieren ver cómo funciona.

13
Desarrollo de Scripts / Obtener números primos.
« en: Septiembre 09, 2017, 06:27:09 pm »
Autor: NiuWeb.
Versión de GM: Studio 1.4.
Descripción: Obtiene un número primo en la posición dada.
///prime_number(pos);
var pos = round(argument0);
var con = 0;
var num = 1;
var prm = true;

while(con < pos)
{
    prm = true;
    for(var i = 2; i < num; i++)
    {
        if(num % i == 0)
        {
            prm = false;
            break;
        }
    }
    if(prm) con++;
    num++;
}
return num - 1;
El único argumento es la posición del número primo a obtener.

Ejemplo:
txt = "";
for(var i = 1; i <= 10; i++)
    txt += string(prime_number(i)) + "#";
show_message(txt);
Muestra lo siguiente:

14
Desarrollo de Scripts / Convertir arreglo unidimensional a cadena de texto.
« en: Septiembre 09, 2017, 06:20:10 pm »
Autor: NiuWeb.
Versión de GM: Studio 1.4.
Descripción: Crea una cadena de texto a partir de el arreglo y las propiedades dadas.
///parse_array(array1d, open, pattern, separator, close)
var array     = argument0;
var opens     = argument1;
var pattern   = argument2;
var separator = argument3;
var close     = argument4;

var arrlen = array_length_1d(array);

var text, part;
var result = "";

for(var i = 0; i < arrlen; i++)
{
    text = string(array[i]);
    part = split(pattern, "$n");
    parl = array_length_1d(part);
    for(var j = 0; j < parl; j++)
    {
        result += part[j];
        if(j < parl - 1) result += text;
    }
   
    if(i < arrlen - 1) result += separator;
}
return opens + result + close;
Para funcionar, este script requiere de éste: split()

Uso:
El argumento array1d es el arreglo original a convertir.

El argumento open es la cadena de texto que estará al inicio.

El arumento pattern es el que permite definir cómo se imprimirán los valores del arreglo. Se usa "$n" como base para insertarlos.

El argumento separator es un separador entre valores. No se inserta al final del último valor.

El argumento close es la cadena de texto que estará al final.

Ejemplo:
arreglo[0] = "Elefante";
arreglo[1] = "Avestruz";
arreglo[2] = "Tiburón";
arreglo[3] = "Cocodrilo";

txt = parse_array(arreglo, "{", '"$n"', ",", "}");
show_message(txt);
Se muestra el siguiente mensaje:

15
Desarrollo de Scripts / Crear arreglo numérico a partir de los valores dados.
« en: Septiembre 09, 2017, 06:03:02 pm »
Autor: NiuWeb.
Versión de GM: Studio 1.4.
Descripción: Crea un arreglo numérico a partir de los valores dados. Estos pueden ser secuencias numéricas (ver más adelante) para facilitar la creación del arreglo.
///create_numarray(value0, ..., value16);
var result, index = 0;

var i, j, arg, nbp, scp;
for(i = 0; i < argument_count; i++)
{
    arg = string(argument[i]);
    arg = string_replace_all(arg, " ", "");
    nbp = string_pos(":", arg);
    scp = string_pos("*", arg);
   
    if(nbp)
    {
        num1 = real(string_copy(arg, 1, nbp - 1));
       
        if(scp)
        {
            num2 = real(string_copy(arg, nbp + 1, scp - nbp - 1));
            num3 = abs(real(string_delete(arg, 1, scp)));
        }
        else
        {
            num2 = real(string_copy(arg, nbp + 1, string_length(arg) - nbp + 1));
            num3 = 1;
        }
           
       
        if(num3 == 0) num3 = 1;
       
        move = sign(num2 - num1);
       
        if(move == 0)
        {
            result[index++] = num1;
            continue;
        }
        else if(move == 1)
        {
            for(j = num1; j <= num2; j += num3)
            {
                result[index++] = j;
            }
        }
        else if(move == -1)
        {
            for(j = num1; j >= num2; j -= num3)
            {
                result[index++] = j;
            }
        }
    }
    else
        result[index++] = real(arg);
}
return result;
Uso:
La forma normal es crear el arreglo insertando como argumentos los números que se deseen guardar en él:
arreglo = create_numarray(3, 7, 12.5, 4.11, 0.91); //etc...
Además, se pueden añadir (como cadena de texto) patrones sencillos para crear secuencias de números. La forma de estos patrones es min:max*step, donde min es el límite menor de la secuencia, max el mayor y step el aumento. Si min es mayor que max, se creará la secuencia en reversa. Si no se escribe el step (sólo min:max), el valor por defecto será 1.
arreglo = create_numarray("2:8"); //2, 3, 4, 5, 6, 7, 8
arreglo = create_numarray("5.5:9*0.25"); //5.5, 5.75, 6, 6.25, 6.5, 6.75, 7, 7.25, 7.5, 7.75, 8, 8.25, 8.5, 8.75, 9
arreglo = create_numarray("11:-5*2"); //11, 9, 7, 5, 3, 1, -1, -3, -5
arreglo = create_numarray(1, 3, 5, "6:9"); //1, 3, 5, 6, 7, 8, 9

Páginas: 1 2 3 ... 8