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

256

  • Nombre del creador: Johann
  • Breve descripción de su función: Acortar y alargar una cadena de texto que tiene caracteres repetidos sucesivamente
  • Versión GM utilizada: Game maker: Studio 1.4.9999
  • Código del Script:

Script para acortar una cadena de texto resumiendo la cantidad de caracteres repetidos sucesivos:
[gml]
///shorten(str)
//
// (ESP)
// Reduce el tamaño de una cadena de texto
// reemplazando un conjunto de caracteres sucesivos
// por el numero de veces que se repite.
//
//     str      cadena de caracteres muy larga
//
// (ENG)
// Reduces the size of a text replacing a set of
// consecutive characters with the number of times
// it is present.
//
//     str      a very large string
//
//
/// GMLscripts.com/license
{
    var str = argument0
    var newStr = "";
    var currentChar;
    var nextChar;
    var size = string_length(str);
    var amount = 0;
    for (var i=1; i<=size; i++) {
        currentChar = string_char_at(str, i);
        if (i!=size) {
            nextChar = string_char_at(str, i+1);
        } else {
            nextChar = "";
        }
        if (currentChar == nextChar) {
            amount = 1;
            newStr += currentChar;
            while (currentChar == nextChar) {
                amount++;
                i++;
                nextChar = string_char_at(str, i+1);
            }
            newStr += ("(" + string(amount) + ")");
        } else {
            newStr += currentChar;
        }
    }
    return newStr;
}
[/gml]

Script para recuperar una cadena de texto reestableciendo la cantidad de caracteres repetidos sucesivos:
[gml]
///enlarge(str)
//
// (ESP)
// Recupera el tamaño de una cadena de texto
// agregando un conjunto de caracteres sucesivos
// a partir del numero de veces que se repite.
//
//     str      cadena de caracteres a alargar
//
// (ENG)
// Recovers the size of a text adding a set of
// consecutive characters with the number of times
// it is needed.
//
//     str      a string to enlarge
//
//
/// GMLscripts.com/license
{
    var str = argument0;
    var oldStr = "";
    var currentChar;
    var nextChar;
    var size = string_length(str);
    var amount = "";
    for (var i=1; i<=size; i++) {
        currentChar = string_char_at(str, i);
        if (i!=size) {
            nextChar = string_char_at(str, i+1);
        } else {
            nextChar = "";
        }
        if (nextChar == "(") {
            amount = "";
            while (nextChar != ")") {
                i++;
                nextChar = string_char_at(str, i+1);
                amount += nextChar;
                show_debug_message(amount);
            }
            repeat(real(amount)) {
                oldStr += currentChar;
            }
            i++;
        } else {
            oldStr += currentChar;
        }
    }
    return oldStr;
}
[/gml]

Estos algoritmos se basan (se inspiran, mejor) en el algoritmo Run-length_encoding y he tenido que hacerlos para acortar y recuperar las cadenas de texto generadas por las funciones ds_*_write() donde el * es el nombre de una estructura de datos en GM, estas funciones retornan un string como el siguiente y su tamaño depende del contenido en la estructura de datos:

[gml]
//Ejemplo
var text = ds_grid_write(my_grid);
show_debug_message(text);
var text2 = shorten(text);
show_debug_message(text2);

[/gml]

5A0200000400000004000000000000000000000000000000000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000
408 caracteres

5A020(5)40(7)40(52)40(23)40(23)40(23)40(95)40(95)40(73)
55 caracteres


Ya que requiero almacenar estos datos en una base de datos sqlite3 para generar unas estructuras visualmente en mi proyecto y no quería almacenar algo muy largo.
En resumen, el tamaño del texto se reduce en un 86.5% mejorando el consumo de memoria en disco, esto es importante para aplicaciones móviles.

Ojalá les gusten y puedan usarlos.
Mañana los posteo en https://www.gmlscripts.com y en el foro de yoyo, haber como me va por allá, por eso usé ese encabezado de comentarios.
257
todo tiene que ser 26:
target SDK:26
compile SDK:26
build tools: 26.0.0
support lib:26.0.0 //toca mirar cual es la ultima

Esa es la idea para que funcione,buscas en el sdkmanager todo lo relacionado con API 26
258
Preguntas y respuestas / Re:Sobre instance_nearest
Octubre 26, 2018, 02:29:45 AM
Si es el jugador el que mira al enemigo no necesitas que sea el enemigo en que ejecute el codigo sino el mismo jugador conociendo la instancia mas cercana.
Haz como puso dixon al final de su codigo, olvida la palabra "with"
259
Vas a tener que instalar el GMS2 para ver si lo trae  :-\
Supongo que con la versión lite viene la ayuda completa.
260
Preguntas y respuestas / Re:Ayuda!
Octubre 25, 2018, 06:15:18 PM
Busca en el foro sobre surfaces y linterna, es algo que ya han hecho varios varias veces.

http://www.comunidadgm.org/preguntas-y-respuestas/como-se-hace-un-efecto-de-oscuridad-y-de-linterna
261
Preguntas y respuestas / Re:Sobre instance_nearest
Octubre 25, 2018, 06:10:27 PM
Es muy facil:

[gml]
if instance_exists(obj_parent_enemigos) {
       with (instance_nearest(x, y, obj_parent_enemigos)) {
            //Aquí iría el código que haría con el enemigo mas cercano. :)
       }
}
[/gml]

El codigo se ejecuta desde el objeto encontrado como el mas cercano.
Revisa la documentación de la palabra with paramas detalles.
262
Cuando uno instala una font en windows ya sale disponible en las fonts de GMS, si no aparece deberías buscarla y volver a instalarla.
Hay fuentes que son TrueType (ttf) y otras que no, tal vez de eso depende si salen en el GMS o no.
Lo que si debes hacer después es incluir el archivo de la font con el ejecutable, esa opción sale en el editor de fonts del GMS
263
hoyga si, yo no había visto esos post que no cumplían el reglamento (se ven horribles XD), por favor arreglalos aplicando la plantilla:

Juegos completos: qué es y cómo funciona - Leer antes de postear

Ultimamente me conecto seguido, asi que estaré pendiente de la corrección.
El unico que está bien es el de los Zombies
264
Preguntas y respuestas / Re:Texto con subindices
Octubre 23, 2018, 08:52:27 PM
Es como lo había pensado, pero me pareció tan engorroso que preferí buscar y como no había encontrado nada, opté por preguntar.
No habia encontrado ese post, es exactamente lo que necesitaba, muchas gracias.

PD: me falta ensayarlo  XD

Editado (08/11/2018): ya lo he ensayado, ha quedado muy bien.
265
Preguntas y respuestas / Texto con subindices
Octubre 23, 2018, 12:29:51 AM
Que onda, estoy necesitando escribir subindices con game maker para generar textos como este:



En GMC encontré un post sobre subindices y superindices pero para el foro :(
Alguna pista? Creo que está dificil
266
Si, a mi también me pareció rarísimo, pero también pienso como dice Clamud.
Los archivos ini tienen una funcionalidad similar a la de una base de datos, cuando quieres un valor te lo trae sin tener en cuenta si es el primero, el de la mitad o el último, lo que importa es que sea rapidito, asi mismo para guardarlos en el archivo, algo asi como "meta eso ahí rápido como caiga que no importa el orden" y ya XD.
267
El formato *.ogg es el estandar en videojuegos para musica de fondo o BGM.
Adicionalmente desde GM:S yoyo lo usa internamente como estandar de codificacion.
Este formato es  muy liviano, de facil carga y de muy buena calidad en el sonido.
268
La función ini_save no me sale en la documentación, es un script tuyo? que código tiene?
269
Pues lo adaptas.
Te recomiendo que estudies mucho, se nota que te hace falta y hay muchas partes de donde aprender, solamente aqui en ComunidadGM tenemos un largo historial de soluciones a problemas comunes como el que planteas.
270
Para que lo quieres dibujar fuera de la view, asi no se vería XD
Si lo que quieres es que aparezca cuando lo quieras ver y desaparezca al rato pones todo el codigo del evento draw_gui dentro de una condicion con una variable "mostrar_gui" o algo asi.
Si lo quieres mover desde fuera hacia adentro de la view yo creo que no pasa nada si lo dibujas en coordenadas como view_xview+x; view_yview+y y modificas la posicion del objeto que lo dibuja para que entre y salga de la view.