<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>the void. &#187; spritefont</title>
	<atom:link href="http://francescomalatesta.net/tag/spritefont/feed/" rel="self" type="application/rss+xml" />
	<link>http://francescomalatesta.net</link>
	<description>&#34;La Mia Ignoranza Non Ha Lacune.&#34;</description>
	<lastBuildDate>Tue, 13 Jul 2010 10:42:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Disegnare il testo su schermo &#8211; Grafica &#8211; XNA Tutorials</title>
		<link>http://francescomalatesta.net/2009/12/31/disegnare-il-testo-su-schermo-grafica-xna-tutorials/</link>
		<comments>http://francescomalatesta.net/2009/12/31/disegnare-il-testo-su-schermo-grafica-xna-tutorials/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 13:23:10 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[XNA]]></category>
		<category><![CDATA[disegno]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[francesco malatesta]]></category>
		<category><![CDATA[grafica]]></category>
		<category><![CDATA[programmazione giochi]]></category>
		<category><![CDATA[spritefont]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=346</guid>
		<description><![CDATA[In questo articolo analizzeremo DrawString, il metodo della classe SpriteBatch che si occupa di disegnare a schermo il testo. Vedremo velocemente come caricare e un font in memoria e successivamente smanetteremo un pò, guardando i vari risultati ottenuti. Innanzitutto, lavorando con XNA dobbiamo sapere che il font viene rappresentato, come risorsa, tramite un file di [...]]]></description>
			<content:encoded><![CDATA[<!-- AdSense Now! V1.92 -->
<!-- Post[count: 2] -->
<div class="adsense adsense-leadin" style="text-align:center;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-7771620956442152";
/* 468x60, creato 30/06/10 */
google_ad_slot = "9180159758";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>In questo articolo analizzeremo DrawString, il metodo della classe SpriteBatch che si occupa di disegnare a schermo il testo. Vedremo velocemente come caricare e un font in memoria e successivamente smanetteremo un pò, guardando i vari risultati ottenuti.</p>
<p>Innanzitutto, lavorando con XNA dobbiamo sapere che il font viene rappresentato, come risorsa, tramite un file di tipo SpriteFont. Questo file conterrà la descrizione del font che utilizzeremo: parametri come la grandezza, il nome del font e così via saranno specificati qui.</p>
<p>Per creare un file SpriteFont, clicchiamo con il pulsante destro del mouse su Content, nell&#8217;Esplora Soluzioni, quindi su <strong><em>Aggiungi -&gt; Nuovo Elemento</em></strong>. (in figura il procedimento)</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-347" title="Senza titolo-2" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-25.jpg" alt="Senza titolo-2" width="400" height="375" /></p>
<p style="text-align: left;">Ci si aprirà una finestra dove dovremo selezionare il tipo di risorsa da creare e il nome da assegnare. Ovviamente sceglieremo SpriteFont e daremo come nome, per esempio, &#8220;font1&#8243;.</p>
<p style="text-align: center;"><a href="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-42.jpg"><img class="alignnone size-medium wp-image-348" title="Senza titolo-4" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-42-300x181.jpg" alt="Senza titolo-4" width="300" height="181" /></a></p>
<p style="text-align: center;"><em>(click per ingrandire)</em></p>
<p style="text-align: left;">Dando l&#8217;ok sarà questo il codice che ci ritroveremo davanti per questa risorsa (ho cancellato i commenti per risparmiare spazio):</p>
<p style="text-align: left;">
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;XnaContent xmlns:Graphics=&quot;Microsoft.Xna.Framework.Content.Pipeline.Graphics&quot;&gt;
  &lt;Asset Type=&quot;Graphics:FontDescription&quot;&gt;
    &lt;FontName&gt;Kootenay&lt;/FontName&gt;

    &lt;Size&gt;14&lt;/Size&gt;

    &lt;Spacing&gt;0&lt;/Spacing&gt;

    &lt;UseKerning&gt;true&lt;/UseKerning&gt;

    &lt;Style&gt;Regular&lt;/Style&gt;

    &lt;CharacterRegions&gt;
      &lt;CharacterRegion&gt;
        &lt;Start&gt;&amp;#32;&lt;/Start&gt;
        &lt;End&gt;&amp;#126;&lt;/End&gt;
      &lt;/CharacterRegion&gt;
    &lt;/CharacterRegions&gt;
  &lt;/Asset&gt;
&lt;/XnaContent&gt;
</pre>
<p>I parametri sono veramente semplici da capire. <strong>FontName</strong> definisce il nome del font utilizzato: lo cambierò in &#8220;Arial&#8221; (senza virgolette ovviamente). <strong>Size</strong> indica la grandezza del font da utilizzare in fase di scrittura. <strong>Spacing</strong> indica invece la larghezza tra un carattere e l&#8217;altro, mentre <strong>UseKerning</strong> è un opzione che gestisce il layout del font. <strong>Style</strong> consente inoltre di decidere che tipo di stile applicare al testo scritto: <em>grassetto, corsivo e così via</em>.</p>
<p>La CharacterRegion indica l&#8217;insieme dei caratteri che è possibile riprodurre. Per ora lo lasceremo così, successivamente modificheremo questi valori per permetterci di riprodurre altri caratteri.</p>
<p>Ecco quindi come appare il file dopo la mia piccola modifica:</p>
<pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;XnaContent xmlns:Graphics=&quot;Microsoft.Xna.Framework.Content.Pipeline.Graphics&quot;&gt;
  &lt;Asset Type=&quot;Graphics:FontDescription&quot;&gt;
    &lt;FontName&gt;Arial&lt;/FontName&gt;

    &lt;Size&gt;14&lt;/Size&gt;

    &lt;Spacing&gt;0&lt;/Spacing&gt;

    &lt;UseKerning&gt;true&lt;/UseKerning&gt;

    &lt;Style&gt;Regular&lt;/Style&gt;

    &lt;CharacterRegions&gt;
      &lt;CharacterRegion&gt;
        &lt;Start&gt;&amp;#32;&lt;/Start&gt;
        &lt;End&gt;&amp;#126;&lt;/End&gt;
      &lt;/CharacterRegion&gt;
    &lt;/CharacterRegions&gt;
  &lt;/Asset&gt;
&lt;/XnaContent&gt;
</pre>
<p>Ora che la nostra risorsa è pronta, dobbiamo includerla con il codice. Creiamo una variabile di tipo SpriteFont e, successivamente, carichiamo la nostra risorsa un pò come avevamo fatto con le immagini, nel metodo LoadContent.</p>
<p>Quindi, prima dichiariamo</p>
<pre class="brush: csharp;">
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        SpriteFont font1;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = &quot;Content&quot;;
        }
</pre>
<p>e dopo carichiamo.</p>
<pre class="brush: csharp;">
        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);

            font1 = Content.Load&lt;SpriteFont&gt;(&quot;font1&quot;);
        }
</pre>
<p>A questo punto non dobbiamo fare altro che disegnare un pò di cose a schermo. Iniziamo con una scritta semplice, la classica &#8220;Ciao Mondo!&#8221; (non poteva mancare). Modificando il codice del metodo Draw con le istruzioni riportate qui,</p>
<pre class="brush: csharp;">
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);

            spriteBatch.Begin();
            spriteBatch.DrawString(font1, &quot;Ciao Mondo!!!&quot;, new Vector2(10, 10), Color.White);
            spriteBatch.End();

            base.Draw(gameTime);
        }
</pre>
<p>il risultato sarà semplicemente questo illustrato.</p>
<p style="text-align: center;"><a href="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-62.jpg"><img class="alignnone size-medium wp-image-349" title="Senza titolo-6" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-62-300x234.jpg" alt="Senza titolo-6" width="300" height="234" /></a></p>
<p style="text-align: center;"><em>(click per ingrandire)</em></p>
<p style="text-align: left;"><strong>Proviamo qualcos&#8217;altro.</strong></p>
<p style="text-align: left;">Tornando ad analizzare il metodo SpriteBatch.DrawString, vediamo un pò quali sono i parametri che diamo.</p>
<ol>
<li>Il primo parametro di tipo SpriteFont è il font con cui disegneremo il testo. Verdana, Arial, Times New Roman di qualsiasi grandezza, questo è il punto di riferimento per eventuali cambiamenti.</li>
<li>Il secondo parametro è la stringa di testo che vogliamo portare su schermo.</li>
<li>Il terzo parametro è un vettore di tipo Vector2 che si occupa di definire su schermo la posizione del testo. Nel mio caso volevo mettere il testo in posizione x = 10 ed y = 10 ed ho definito così il vettore di conseguenza.</li>
<li>Il quarto parametro è il colore del testo, che possiamo cambiare a nostro piacimento. Qui di seguito qualche prova con i valori Green, Red e Lime.</li>
</ol>
<p style="text-align: center;"><img class="alignnone size-full wp-image-351" title="Senza titol654" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titol6541.jpg" alt="Senza titol654" width="283" height="167" /></p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-352" title="Senza titolo-3" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-32.jpg" alt="Senza titolo-3" width="288" height="196" /></p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-354" title="Senza titolo-2" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-26.jpg" alt="Senza titolo-2" width="274" height="158" /></p>
<p style="text-align: left;">Dopo queste prove con il colore vediamo l&#8217;overload del metodo da noi usato, che al posto dei classici quattro parametri ne presenta di più, precisamente 9. Grazie a questo metodo potremo ruotare il nostro testo:</p>
<p style="text-align: left;">
<pre class="brush: csharp;">
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);

            spriteBatch.Begin();

            spriteBatch.DrawString(
                                    font1,
                                    &quot;testo di prova 2&quot;,
                                    new Vector2(200, 200),
                                    Color.White,
                                    10,
                                    new Vector2(
                                        font1.MeasureString(&quot;testo di prova 2&quot;).X/2,
                                        font1.MeasureString(&quot;testo di prova 2&quot;).Y/2
                                        ),
                                    1.0f,
                                    SpriteEffects.None,
                                    1
                                    );

            spriteBatch.End();

            base.Draw(gameTime);
        }
</pre>
<p><em>I primi quattro parametri rimangono invariati: non abbiamo bisogno di descriverli un&#8217;altra volta</em>. Ciò che cambia invece arriva dopo. Abbiamo quel &#8220;10&#8243; che rappresenta <strong>l&#8217;angolo di rotazione</strong> che vogliamo usare. Ovviamente serve un <strong>centro di rotazione</strong>, ed a questo serve il successivo parametro, di tipo Vector2. E&#8217; prevista anche la possibilità di <strong>gestire lo scaling del testo</strong> (il ridimensionamento) tramite un parametro di tipo Float. Infine abbiamo il tipo di <strong>effetto</strong> da dare al testo (provate voi stessi a smanettarci per vedere i risultati) ed infine la <strong>profondità del layout</strong> come ultimo parametro.</p>
<p>Ecco qui il risultato del codice, ed anche con il testo per ora abbiamo finito.</p>
<p style="text-align: center;"><a href="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo55.jpg"><img class="alignnone size-medium wp-image-360" title="Senza titolo55" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo55-300x234.jpg" alt="Senza titolo55" width="300" height="234" /></a></p>
<p style="text-align: center;"><em>(click per ingrandire)</em></p>
<p style="text-align: center;">
<p style="text-align: left;">P.S: è importante sapere come regolarsi con le CharacterRegions del file XML della risorsa. Come ho detto precedentemente, questo parametro del font permette di decidere quali caratteri verranno ridisegnati. I valori che notiamo nel codice</p>
<pre class="brush: csharp;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;XnaContent xmlns:Graphics=&quot;Microsoft.Xna.Framework.Content.Pipeline.Graphics&quot;&gt;
  &lt;Asset Type=&quot;Graphics:FontDescription&quot;&gt;
    &lt;FontName&gt;Arial&lt;/FontName&gt;

    &lt;Size&gt;14&lt;/Size&gt;

    &lt;Spacing&gt;0&lt;/Spacing&gt;

    &lt;UseKerning&gt;true&lt;/UseKerning&gt;

    &lt;Style&gt;Regular&lt;/Style&gt;

    &lt;CharacterRegions&gt;
      &lt;CharacterRegion&gt;
        &lt;Start&gt;&amp;#32;&lt;/Start&gt;
        &lt;End&gt;&amp;#126;&lt;/End&gt;
      &lt;/CharacterRegion&gt;
    &lt;/CharacterRegions&gt;
  &lt;/Asset&gt;
&lt;/XnaContent&gt;
</pre>
<p>tra i tag Start ed End sono i codici ASCII di partenza e di arrivo dell&#8217;insieme dei caratteri riproducibili. In poche parole, il sistema sarà in grado di disegnare su schermo i caratteri che hanno il codice ASCII che va da 32 a 126. Volendo portare a schermo dei caratteri come &#8220;ò&#8221; oppure &#8220;à&#8221; dovremo necessariamente modificare l&#8217;intervallo, in quando non include questi caratteri. Al posto di 126, nel tag End, usate 255 e non dovreste avere ulteriori problemi.</p>
<p>Cheers.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F12%2F31%2Fdisegnare-il-testo-su-schermo-grafica-xna-tutorials%2F&amp;linkname=Disegnare%20il%20testo%20su%20schermo%20%26%238211%3B%20Grafica%20%26%238211%3B%20XNA%20Tutorials"><img src="http://francescomalatesta.net/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://francescomalatesta.net/2009/12/31/disegnare-il-testo-su-schermo-grafica-xna-tutorials/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
