<?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; ridimensionare</title>
	<atom:link href="http://francescomalatesta.net/tag/ridimensionare/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>Ridimensionare una Sprite &#8211; Grafica &#8211; XNA Tutorials</title>
		<link>http://francescomalatesta.net/2009/12/29/ridimensionare-una-sprite-grafica-xna-tutorials/</link>
		<comments>http://francescomalatesta.net/2009/12/29/ridimensionare-una-sprite-grafica-xna-tutorials/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 11:57:00 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[XNA]]></category>
		<category><![CDATA[grafica]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[immagini]]></category>
		<category><![CDATA[programmazione giochi]]></category>
		<category><![CDATA[ridimensionare]]></category>
		<category><![CDATA[sprite]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=328</guid>
		<description><![CDATA[Ridimensionare una sprite, al pari della rotazione, è un&#8217;operazione molto semplice, nonostante sia molto comune in tantissimi giochi. Comunque sia, chiacchiere a parte, in questo articolo affronteremo due metodi di ridimensionamento: prima quello &#8220;fisso&#8221;, ovvero il disegno della texture ridimensionata, e successivamente quello &#8220;variabile&#8221; tramite input da tastiera. Ridimensionamento &#8220;fisso&#8221; Il nocciolo della questione, come [...]]]></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>Ridimensionare una sprite, al pari della rotazione, è un&#8217;operazione molto semplice, nonostante sia molto comune in tantissimi giochi. Comunque sia, chiacchiere a parte, in questo articolo affronteremo due metodi di ridimensionamento: prima quello &#8220;fisso&#8221;, ovvero il disegno della texture ridimensionata, e successivamente quello &#8220;variabile&#8221; tramite input da tastiera.</p>
<ul>
<li>Ridimensionamento &#8220;fisso&#8221;</li>
</ul>
<p>Il nocciolo della questione, come potete immaginare, si trova nel metodo Draw, che come abbiamo detto prima è il punto in cui i contenuti vengono disegnati su schermo. A fare la parte importante, nel nostro caso, è il rettangolo che noi diamo come parametro nel metodo Draw dello SpriteBatch da noi utilizzato. Nello specifico, di questo rettangolo modificheremo larghezza ed altezza.</p>
<p>Ecco il metodo Draw:</p>
<pre class="brush: csharp;">
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();

            spriteBatch.Draw(immagine, new Rectangle(10, 10, immagine.Width * 2, immagine.Height * 2), Color.White);

            spriteBatch.End();

            base.Draw(gameTime);
        }
</pre>
<p>Stavolta ho semplicemente dato come dimensione del rettangolo una larghezza pari al doppio della rispettiva nell&#8217;immagine e un&#8217;altezza calcolata in egual modo. Il risultato? Eccolo.</p>
<p style="text-align: center;"><a href="http://francescomalatesta.net/wp-content/uploads/2009/12/asd1.jpg"><img class="alignnone size-medium wp-image-329" title="asd" src="http://francescomalatesta.net/wp-content/uploads/2009/12/asd1-300x234.jpg" alt="asd" width="300" height="234" /></a></p>
<p style="text-align: center;"><em>(Click per ingrandire)</em></p>
<p style="text-align: left;">Adesso passiamo all&#8217;ingrandimento dato dall&#8217;input dell&#8217;utente. Anche questo è molto semplice da gestire: tuttavia, richiederà qualche variabile in più in quanto abbiamo dei problemi a livello di tipo di variabili.</p>
<p style="text-align: center;"><em><img class="alignnone size-full wp-image-331" title="Senza titolo-2" src="http://francescomalatesta.net/wp-content/uploads/2009/12/Senza-titolo-24.jpg" alt="Senza titolo-2" width="365" height="57" /></em></p>
<p style="text-align: left;"><em>Mi spiego meglio: come potete vedere dall&#8217;intellisense, la proprietà Width e Height di una texture sono di tipo Int. Questo vuol dire che, per ottenere un&#8217;ingrandimento di, toh, una volta e mezzo (x1.5) avremo dei problemi  rimanendo ad usare gli interi. Per cui, ecco cosa faremo.</em></p>
<ol>
<li>Creiamo una variabile di tipo float, chiamata moltiplicatore. Qui memorizzeremo il valore da usare per la moltiplicazione nel ridimensionamento.</li>
<li>Modifichiamo il metodo Update in modo da gestire l&#8217;input da tastiera.</li>
<li>Modifichiamo il metodo Draw in modo da disegnare bene la nostra immagine.</li>
</ol>
<p>Ecco la nostra variabile:</p>
<pre class="brush: csharp;">
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        Texture2D immagine;

        float moltiplicatore = 1.0f;
</pre>
<p>In fase di disegno moltiplicheremo le dimensioni dell&#8217;immagine per questo valore. Ponendo come valore iniziale 1.0, inizialmente la nostra immagine verrà disegnata nella sua grandezza naturale.</p>
<p>Ora gestiamo l&#8217;input da parte dell&#8217;utente: stavolta i tasti che useremo saranno il &#8220;+&#8221; per ingrandire ed il &#8220;-&#8221; per rimpicciolire. Il metodo Update verrà riscritto così:</p>
<pre class="brush: csharp;">
        protected override void Update(GameTime gameTime)
        {
            if (Keyboard.GetState().IsKeyDown(Keys.Add))
            {
                if (moltiplicatore &lt; 2.0f)
                {
                    moltiplicatore += 0.05f;
                }
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Subtract))
            {
                if (moltiplicatore &gt; 0.5f)
                {
                    moltiplicatore -= 0.05f;
                }
            }

            base.Update(gameTime);
        }
</pre>
<p>Per evitare problemi nel mostrare l&#8217;immagine (dimensioni negative e così via) ho limitato il ridimensionamento in modo tale che vada da un minimo di 0.5 (la metà della grandezza originale) a 2.0 (il doppio <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). I valori &#8220;Keys.Add&#8221; e &#8220;Keys.Subtract&#8221; sono i corrispettivi del &#8220;+&#8221; e del &#8220;-&#8221;.</p>
<p><em>(nel caso togliate i limiti del ridimensionamento, andando in negativo si ottiene l&#8217;immagine capovolta, quando la variabile moltiplicatore è diversa da zero)</em></p>
<p>Infine ecco il metodo Draw riscritto:</p>
<pre class="brush: csharp;">
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            spriteBatch.Begin();

            spriteBatch.Draw(immagine, new Rectangle(10, 10, (int)(immagine.Width * moltiplicatore), (int)(immagine.Height * moltiplicatore)), Color.White);

            spriteBatch.End();

            base.Draw(gameTime);
        }
</pre>
<p>Ogni dimensione viene moltiplicata per il moltiplicatore (gioco di parole non voluto) e successivamente visto come int tramite l&#8217;aggiunta di &#8220;(int)&#8221; dietro l&#8217;espressione da usare. Potete provare voi stessi il tutto senza ulteriori spiegazioni <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F12%2F29%2Fridimensionare-una-sprite-grafica-xna-tutorials%2F&amp;linkname=Ridimensionare%20una%20Sprite%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/29/ridimensionare-una-sprite-grafica-xna-tutorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
