Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Vado ad intuizione, quindi probabilmente sbaglierò...
Il tuo problema sarebbe che "hello man how..." presenta delle spaziature anomale?
newx = x + (i * 30);
quel 30 mi pare parecchio arbitrario
Se invece il problema è la sovrapposizione con la risposta allora questo codice non basta
Ultima modifica effettuata da Roby94 il 23/01/2018 alle 18:22
Vado ad intuizione, quindi probabilmente sbaglierò...
Il tuo problema sarebbe che "hello man how..." presenta delle spaziature anomale?
newx = x + (i * 30);
quel 30 mi pare parecchio arbitrario
Se invece il problema è la sovrapposizione con la risposta allora questo codice non basta
no, non presenta spazi anomali.
i*30 ho usato questo metodo per separare i caratteri uno dall'altro
altrimenti esce tutto attaccato.
questo perché è l'utente tramite script che decide quante parole o righe voler mostrare di un colore.
il codice che stampa il testo è unicamente quello.
nulla più
la funzione javascript va ad azionare quel metodo inviando i parametri come X,y e stringa
la funzione javascript è questa, ovvero che il motore interpreta
Codice sorgente - presumibilmente Plain Text
Scene_Menu.prototype.Update = function()
{
this.bitmap.DrawText(50,50,"Hello ?c[1]man ?c[10]how are you? ?c[2]Im fine tanks");
};
Questo è quanto non sò proprio dove sbattere la testa
Dico default perché quando l'utente tenta di scrivere del testo senza nessun tag, appare perfettamente.
perché il motore non ha bisogno di applicare colori a deterimante parole.
Quindi sfrutta un semplicissimo DrawText su coordinate X e Y.
come tag intendo, un comando che viene impartito tramite script.
Perché il mio motore ha un interprete di Javascript.
Questo è il comando per scrivere testo
Codice sorgente - presumibilmente Plain Text
//SCRIPT
// X Y TEXT
this.bitmap.DrawText(50,50,"Hello man how are you? im fine tanks");
che và a richiamare questa funzione
Codice sorgente - presumibilmente C#
/// <summary>
/// Disegna del testo in specifiche coordinate
/// </summary>
/// <param name="x">X</param>
/// <param name="y">Y</param>
/// <param name="text">Testo</param>
/// <param name="color">Colore Opzionale</param>
publicvoid draw_text(int x, int y, string text,int color =0)
{
//........
Batch.DrawString(debugFont, text, new Vector2(x, y), Color.White);//Default White
}
Successivamente sto cercando di dare all'utente la possibilità di colorare
determinate parole aggiungendo dei tag nella stringa
Però a differenza della semplice funzione scritta sopra.
Questo metodo và a scrivere lettera per lettera e colorare solo quelle indicate nella stringa tramite vari tag
this.bitmap.DrawText(50,50,"Hello man ?c[10]how are you? ?c[1]im fine tanks");
tramite Regex e un ciclo for vado a sistemare la stringa in 2 array.
Codice sorgente - presumibilmente Python
//Recupero il codice del colore contenuto nelle parentesi, ma splittando mi rimanre ?c
//Oltre a prendermi il codice del colore mi mette inarray anche le varie parole.
string[] a = Regex.Split(text, @"\[(.*?)\]");
for(int i = 0; i < a.Length; i++)
{
if(a[i].Contains("?c"))
{
a[i] = a[i].Replace("?c", ""); //Se è presente ?c nella stringa lo rimuovo.
}
}
Successivamente vado a scrivere a video
Codice sorgente - presumibilmente C# / VB.NET
int? colore = 0;
int newx;
for (int i = 0; i < a.Length; i++)
{
try { colore = Convert.ToInt16(a[i]); i++; } //Vado a prendere dall'array "a" il codice del colore
catch { };
newx = x + (i * 30); //Spazio tra un carettere e l'altro
if (colore != 0 || colore != null)
{
//Se il codice colore è 0 o nullo scrivilo bianco.
spriteBatch.DrawString(debugFont, a[i], new Vector2(newx, y), Color.White);
}
if (colore == 10) //Colore oro
{
spriteBatch.DrawString(debugFont, a[i], new Vector2(newx, y), Color.Gold);
}
if (colore == 1) //Colore Rosso
{
spriteBatch.DrawString(debugFont, a[i], new Vector2(newx, y), Color.Red);
}
if (colore == 2) //Colore blu
{
spriteBatch.DrawString(debugFont, a[i], new Vector2(newx, y), Color.Blue);
}
}
Qui c'è il problema
Stranamente mi mostra degli spazi come se il testo venisse giustificato centralmente.
e non sò perché
forse sarà qualche problema dovuto a newx = x + (i * 30);
non saprei, ma più aumento il valore, più si distaccano le parole.
ottenendo questo effetto
Postato originariamente da Thejuster: if (colore != 0 || colore != null)
{
//Se il codice colore è 0 o nullo scrivilo bianco.
spriteBatch.DrawString(debugFont, a, new Vector2(newx, y), Color.White);
}
Non sarà sicuramente questo, ma il codice qui fa il contrario del commento.
Prova a fare una prova con una frase molto, molto lunga e vedi se c'è una sorta di logica nella spaziatura risultante..
Postato originariamente da Thejuster: la string scritta è questa
Codice sorgente - presumibilmente C# / VB.NET
this.bitmap.DrawText(50,50,"Hello man ?c[10] how are you? im fine tanks and you?");
E' giusta?
Non ho trovato nessuna DrawText(int ,int , String).
Scusa se faccio queste domande, ma non vedendo tutto il codice non so come aiutare.
Comunque, a me sembra che la distanza delle lettere aumenti parola per parola...