sggsoftware
Membro
Messaggi: 178
Iscritto il: 01/07/2007, 15:09
Uso: GM:Studio 2
Località: Sicilia
Contatta:

[tutorial] Andata a capo automatica

Messaggio da sggsoftware »

Qui c'è un piccolo script che avevo realizzato tempo fa per aggiungere automaticamente le andate a capo in una stringa da stampare sullo schermo troppo lunga. Lo posto nel caso possa risultare utile (per esempio per realizzare un sistema di dialoghi).

Occorre passare allo script 3 argomenti:
argument0: la stringa a cui aggiungere le andate a capo
argument1: la font che verrà adoperata per stampare la stringa
argument2: larghezza massima che può raggiungere ogni singola riga di testo

Lo script ritorna la stringa di testo con aggiunte le andate a capo, pronta per essere stampata sullo schermo.

Codice: Seleziona tutto

draw_set_font(argument1);

var i,word,wid,str;
i=1;wid=0;str="";

while (i<=string_length(argument0))
{
    word="";
    while (string_char_at(argument0,i)!=" " && i<=string_length(argument0))
    {
        word+=string_char_at(argument0,i);
        i+=1;
    }
    
    i+=1;
    
    if (wid+string_width(word)>argument2)
    {
        str+="#";
        wid=0;
    }
    
    word+=" ";
    str+=word;
    wid+=string_width(word);
}

return (str);
Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Re: Andata a capo automatica

Messaggio da Lapo »

Ma non ci pensa già game maker?

Realizzare certi meccanismi a volte è utile, per avere più flessibilità, quindi ti chiedo, cosa fa questo meccanismo che già non sia presente in game maker?
sggsoftware
Membro
Messaggi: 178
Iscritto il: 01/07/2007, 15:09
Uso: GM:Studio 2
Località: Sicilia
Contatta:

Re: Andata a capo automatica

Messaggio da sggsoftware »

Lapo ha scritto:Ma non ci pensa già game maker?
Aaaarghhh, hai ragione!! :shock:
Solo ora ho scoperto nell'help che esiste la funzione draw_text_ext, che ha lo stesso scopo. A saperlo non avrei perso tempo a scrivere uno script mio! :o
Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Re: Andata a capo automatica

Messaggio da Lapo »

sggsoftware ha scritto:Solo ora ho scoperto nell'help che esiste la funzione draw_text_ext, che ha lo stesso scopo. A saperlo non avrei perso tempo a scrivere uno script mio! :o
8)
sggsoftware
Membro
Messaggi: 178
Iscritto il: 01/07/2007, 15:09
Uso: GM:Studio 2
Località: Sicilia
Contatta:

Messaggio da sggsoftware »

Uhm, a dire il vero ora che ci penso c'è comunque qualche vantaggio: la funzione draw_text_ext stampa direttamente il testo sullo schermo, la mia invece serve ad aggiungere le andate a capo ad una stringa.

Mettiamo ad esempio che io voglia creare una finestrella di dialogo e fare comparire il testo una lettera alla volta (come spesso si vede in tanti RPG). Usando la funzione di Game Maker, l'effetto sarebbe leggermente peggiore.

Sistema draw_text_ext:

Codice: Seleziona tutto

// evento create
testo="bla bla bla";
i=0;

// evento step
i++;

// evento draw
draw_text_ext(0,0,string_copy(testo,1,i),32,640);
Col mio script:

Codice: Seleziona tutto

// evento create
testo=mio_script("bla bla bla",font,640);
i=0;

// evento step
i++;

// evento draw
draw_text_ext(0,0,string_copy(testo,1,i),32,-1);
Ammettiamo che il programma stia finendo di stampare la prima riga di testo. La parola più a destra verrebbe prima disegnata nella prima riga. Poi, aggiungendo altre lettere, la riga supererebbe la grandezza massima stabilita, e l'ultima parola finirebbe spostata bruscamente nella riga successiva.

Con questo script il problema invece non può verificarsi: le andate a capo vengono aggiunte considerando la stringa "per intero"! ;)
Lapo
GMI VIP
Messaggi: 3949
Iscritto il: 27/07/2005, 8:25
Uso: GM:Studio 2
Contatta:

Messaggio da Lapo »

Volevo ben dire. :D