<?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; net</title>
	<atom:link href="http://francescomalatesta.net/tag/net/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>Il Template &#8211; Guida SDL.NET</title>
		<link>http://francescomalatesta.net/2009/11/21/il-template-guida-sdl-net/</link>
		<comments>http://francescomalatesta.net/2009/11/21/il-template-guida-sdl-net/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 10:34:51 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[SDL.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[giochi]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=91</guid>
		<description><![CDATA[Appena ho visto il file Template.Cs, messo a disposizione da Paul Aspinall sul sito ufficiale di SDL.NET, ho subito trovato questa risorsa decisamente interessante. Dove molto spesso c&#8217;è confusione nell&#8217;approccio iniziale, questo file mette subito in chiaro tutti i metodi tendenzialmente usati e permette di avere il vantaggio di uno &#8220;scheletro&#8221; base già pronto. Ho [...]]]></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>Appena ho visto il file Template.Cs, messo a disposizione da Paul Aspinall sul sito ufficiale di SDL.NET, ho subito trovato questa risorsa decisamente interessante. Dove molto spesso c&#8217;è confusione nell&#8217;approccio iniziale, questo file mette subito in chiaro tutti i metodi tendenzialmente usati e permette di avere il vantaggio di uno &#8220;scheletro&#8221; base già pronto.</p>
<p>Ho detto <strong>base</strong> perchè, volendo partire senza troppe pretese da questo file di certo non realizzeremo Assassin&#8217;s Creed 2. Comunque sia, riporto qui di seguito il codice del file per intero commentato, fornendo anche la disponibilità per il download. Buona lettura!</p>
<p>[code]]czozNTEyOlwiDQovL1B1YmxpYyBEb21haW4NCi8vT3JpZ2luYWwgdmVyc2lvbiB3cml0dGVuIGJ5IFBhdWwgQXNwaW5hbGwuDQovL1Z7WyYqJl19ZXJzaW9uZSBjb21tZW50YXRhIGRhIEZyYW5jZXNjbyBNYWxhdGVzdGEgaW4gSXRhbGlhbm8gOikNCg0KLy8gRGlyZXR0aXZlIHVzaXtbJiomXX1uZyBwZXIgbFwnaW5jbHVzaW9uZSBkZWkgbmFtZXNwYWNlIGludGVyZXNzYXRpLg0KdXNpbmcgU3lzdGVtOw0KdXNpbmcgU3lzdGVtLntbJiomXX1EcmF3aW5nOw0KDQp1c2luZyBTZGxEb3ROZXQuQ29yZTsNCnVzaW5nIFNkbERvdE5ldC5HcmFwaGljczsNCnVzaW5nIFNkbERvdE5le1smKiZdfXQuSW5wdXQ7DQoNCm5hbWVzcGFjZSBTZGxEb3ROZXRFeGFtcGxlcy5TbWFsbERlbW9zDQp7DQogICAgcHVibGljIGNsYXNzIFRlbXB7WyYqJl19bGF0ZQ0KICAgIHsNCiAgICAgICAgLyoNCiAgICAgICAgICogUXVlc3RvIG1ldG9kbyBiYXNlIMOoIHN0YXRpY28gZWQgw6ggaWwgcHtbJiomXX11bnRvIGRcJ2luZ3Jlc3NvIG5lbGxhIG5vc3RyYSBhcHBsaWNhemlvbmUuIERhIHF1aSwgaW5mYXR0aSwNCiAgICAgICAgICogZGljaHtbJiomXX1pYXJlcmVtbyB1bmEgbnVvdmEgdmFyaWFiaWxlIGRpIHRpcG8gVGVtcGxhdGUgZWQgZXNlZ3VpcmVtbyBpbCBtZXRvZG8gR28uDQoge1smKiZdfSAgICAgICAgKi8NCiAgICAgICAgW1NUQVRocmVhZF0NCiAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQ0KICAgICAgICB7WyYqJl19ew0KICAgICAgICAgICAgVGVtcGxhdGUgZ2FtZSA9IG5ldyBUZW1wbGF0ZSgpOw0KICAgICAgICAgICAgZ2FtZS5HbygpOw0KICAgIHtbJiomXX0gICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIElsIGNvc3RydXR0b3JlIFRlbXBsYXRlIGF0dHVhbG1lbnRlIMOoIHZ1b3Rve1smKiZdfSBtYSBnZW5lcmFsbWVudGUgw6ggbW9sdG8gdXRpbGUgcGVyIGluaXppYWxpenphcmUgdmFyaWFiaWxpDQogICAgICAgICAqIGNoZSB7WyYqJl19dmVycmFubm8gc3VjY2Vzc2l2YW1lbnRlIHVzYXRlIG5lbCBnaW9jby4NCiAgICAgICAgICovDQogICAgICAgIHB1YmxpYyBUZW1wbHtbJiomXX1hdGUoKQ0KICAgICAgICB7DQogICAgICAgIH0NCiAgICAgICAgLyoNCiAgICAgICAgICogSWwgbWV0b2RvIEdvLCBpbiBxdWVzdG8ge1smKiZdfWNhc28sIGRlZmluaXNjZSBsYSByaXNvbHV6aW9uZSBkZWxsYSBmaW5lc3RyYSBkaSBnaW9jbyAoODAwIHggNjAwKSBlIGF2dmlhIGl7WyYqJl19bCBtZXRvZG8NCiAgICAgICAgICogQWRkSGFuZGxlcnMsIGNoZSBhbmFsaXp6ZXJlbW8gdHJhIHBvY28uIEluIHVsdGltbywgaW5vbHtbJiomXX10cmUsIGxhbmNpYSBpbCBtZXRvZG8gRXZlbnRzLlJ1bigpLCBmYWNlbmRvIHBhcnRpcmUNCiAgICAgICAgICogaW4gcXVlc3RvIG1ve1smKiZdfWRvIGlsIExvb3AgcHJpbmNpcGFsZSBkZWwgZ2lvY28uDQogICAgICAgICAqLw0KICAgICAgICBwdWJsaWMgdm9pZCBHbygpDQogICB7WyYqJl19ICAgICB7DQogICAgICAgICAgICBWaWRlby5TZXRWaWRlb01vZGUoODAwLCA2MDApOw0KICAgICAgICAgICAgdGhpcy5BZGRIYW5kbHtbJiomXX1lcnMoKTsNCiAgICAgICAgICAgIEV2ZW50cy5SdW4oKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIEFkZEhhe1smKiZdfW5kbGVycyDDqCB1biBtZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIHNpc3RlbWEgYWQgZXZlbnRpLCBkZWZpbmVuZG97WyYqJl19IGNvbiBmYWNpbGl0w6AgdHV0dGkgcXVlbGxpDQogICAgICAgICAqIGNoZSBkb3ZyYW5ubyBlc3NlcmUgY29udGVtcGxhdGkgZGFsIHtbJiomXX1ub3N0cm8gcHJvZ3JhbW1hLiBJbiBxdWVzdG8gY2FzbyBhYmJpYW1vIGFnZ2l1bnRvIGRlZ2xpIEhhbmRsZXIgcGVyDQogICAgICAge1smKiZdfSAgKiBsXCdldmVudG8gUXVpdCAodXNjaXRhIGRhbCBwcm9ncmFtbWEpIGUgVGljayAoZXZlbnRvIGNoZSBzaSBwcmVzZW50YSBhZCBve1smKiZdfWduaSBmcmFtZSkuDQogICAgICAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgQWRkSGFuZGxlcnMoKQ0KICAgICAgICB7DQogICB7WyYqJl19ICAgICAgICAgRXZlbnRzLlF1aXQgKz0gbmV3IEV2ZW50SGFuZGxlcjxRdWl0RXZlbnRBcmdzPih0aGlzLkV2ZW50c19RdWl0KTsNCntbJiomXX0gICAgICAgICAgICBFdmVudHMuVGljayArPSBuZXcgRXZlbnRIYW5kbGVyPFRpY2tFdmVudEFyZ3M+KHRoaXMuRXZlbnRzX1RpY2spe1smKiZdfTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIFJlbW92ZUhhbmRsZXJzKCkgdG9nbGllIHF1ZWxsbyBjaGUgQWR7WyYqJl19ZEhhbmRsZXJzKCkgYXZldmEgYWdnaXVudG86IHZlbmdvbm8gcmltb3NzaSBnbGkgSGFuZGxlciBhaSB2YXJpIGV2ZW50aQ0KICAgIHtbJiomXX0gICAgICogZSwgY29tZSB2ZWRyZW1vIHN1Y2Nlc3NpdmFtZW50ZSwgcXVlc3RvIG1ldG9kbyB2aWVuZSB1dGlsaXp6YXRvIGluIGZhe1smKiZdfXNlIGRpIHVzY2l0YSBkYWwgZ2lvY28uDQogICAgICAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgUmVtb3ZlSGFuZGxlcnMoKQ17WyYqJl19CiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLlF1aXQgLT0gbmV3IEV2ZW50SGFuZGxlcjxRdWl0RXZlbnRBcmdzPih0aGlzLntbJiomXX1FdmVudHNfUXVpdCk7DQogICAgICAgICAgICBFdmVudHMuVGljayAtPSBuZXcgRXZlbnRIYW5kbGVyPFRpY2tFdmVudEFyZ3M+KHRoe1smKiZdfWlzLkV2ZW50c19UaWNrKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIEV2ZW50c19UaWNrIMOoIGlsIG1ldG97WyYqJl19ZG8gY29udGVtcGxhdG8gcGVyIGxcJ2V2ZW50byBUaWNrOiBxdWVsbG8gY2hlIGZhIMOoIHNlbXBsaWNlLiBJbml6aWFsbWVudGUgcml7WyYqJl19ZW1waWUNCiAgICAgICAgICogbGEgZmluZXN0cmEgZGkgYmx1ZSwgdHJhbWl0ZSBpbCBtZXRvZG8gRmlsbCBkZWxsYSBTdXJmYWNlIHtbJiomXX1TY3JlZW4uIFN1Y2Nlc3NpdmFtZW50ZSBhZ2dpb3JuYSBpbCB0dXR0byB0cmFtaXRlDQogICAgICAgICAqIGlsIG1ldG9kbyBVcGRhe1smKiZdfXRlKCksIHByb3Z2ZWRlbmRvIGluIHF1ZXN0byBtb2RvIGEgbWFuZGFyZSBzdWxsbyBzY2hlcm1vIGkgcmlzdWx0YXRpIGRlbGxcJ2Vse1smKiZdfWFib3JhemlvbmUuDQogICAgICAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgRXZlbnRzX1RpY2sob2JqZWN0IHNlbmRlciwgVGl7WyYqJl19Y2tFdmVudEFyZ3MgZSkNCiAgICAgICAgew0KICAgICAgICAgICAgVmlkZW8uU2NyZWVuLkZpbGwoU3lzdGVtLkRyYXdpbmcuQ29sb3tbJiomXX1yLkJsdWUpOw0KICAgICAgICAgICAgVmlkZW8uU2NyZWVuLlVwZGF0ZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAge1smKiZdfSAgICAqIENvbWUgZ2nDoCBkZXR0byBwcmVjZWRlbnRlbWVudGUsIEV2ZW50c19RdWl0IHByb3Z2ZWRlIGEgcmltdW92ZXJlIGkgdmF7WyYqJl19cmkgRXZlbnRIYW5kbGVycyB0cmFtaXRlIGlsIG1ldG9kbw0KICAgICAgICAgKiBSZW1vdmVIYW5kbGVycygpIGUgc3VjY2Vzc2l2YXtbJiomXX1tZW50ZSBlc2NlIGRhbCBwcm9ncmFtbWEsIHRyYW1pdGUgaWwgbWV0b2RvIEV2ZW50cy5RdWl0QXBwbGljYXRpb24oKS4NCiAgICAge1smKiZdfSAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgRXZlbnRzX1F1aXQob2JqZWN0IHNlbmRlciwgUXVpdEV2ZW50QXJncyBlKQ0KICB7WyYqJl19ICAgICAgew0KICAgICAgICAgICAgUmVtb3ZlSGFuZGxlcnMoKTsNCiAgICAgICAgICAgIEV2ZW50cy5RdWl0QXBwbGljYXRpb24oKXtbJiomXX07DQogICAgICAgIH0NCiAgICB9DQp9DQpcIjt7WyYqJl19[[/code]</p>
<p>Scarica il file <a href="http://www.francescomalatesta.net/files/Template.cs">Template.cs</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F11%2F21%2Fil-template-guida-sdl-net%2F&amp;linkname=Il%20Template%20%26%238211%3B%20Guida%20SDL.NET"><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/11/21/il-template-guida-sdl-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Input &#8211; Mouse e Tastiera &#8211; Guida SDL.NET</title>
		<link>http://francescomalatesta.net/2009/11/21/input-mouse-e-tastiera-guida-sdl-net/</link>
		<comments>http://francescomalatesta.net/2009/11/21/input-mouse-e-tastiera-guida-sdl-net/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 10:02:45 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[SDL.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[giochi]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[input]]></category>
		<category><![CDATA[librerie]]></category>
		<category><![CDATA[mouse]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[tastiera]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=85</guid>
		<description><![CDATA[Ora cambiamo un po argomento. Abbiamo visto tutto (o quasi) ciò che poteva riguardare l&#8217;output: abbiamo imparato a caricare un immagine sullo schermo, come renderla trasparente, come caricare un font e scriverci qualcosa ed anche aprire un file audio per usare un effetto sonoro nei nostri programmi. Sapete bene però che un gioco non è [...]]]></description>
			<content:encoded><![CDATA[<p>Ora cambiamo un po argomento. Abbiamo visto tutto (o quasi) ciò che poteva riguardare l&#8217;output: abbiamo imparato a caricare un immagine sullo schermo, come renderla trasparente, come caricare un font e scriverci qualcosa ed anche aprire un file audio per usare un effetto sonoro nei nostri programmi.</p>
<p>Sapete bene però che un gioco non è solo Output. Un gioco è interazione, un gioco è anche Input. Per cui, adesso inizieremo a guardare le varie alternative che ci vengono proposte per gestire al meglio il modo in cui l&#8217;utente interagisce con il nostro gioco. Vi ricordate il sistema degli eventi, che avevo descritto ed introdotto qualche tempo fa? Inizieremo proprio da lì.</p>
<p>Riprendiamo l&#8217;esempio dell&#8217;Hello World, apportando però qualche modifica al codice:</p>
<p>[code]]czo3OTg6XCINCnVzaW5nIFN5c3RlbTsNCg0KdXNpbmcgU2RsRG90TmV0LkNvcmU7DQp1c2luZyBTZGxEb3ROZXQuR3JhcGhpY3M7DQp7WyYqJl19DQpuYW1lc3BhY2UgU2RsRG90TmV0RXhhbXBsZXMuU21hbGxEZW1vcw0Kew0KICAgIHB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkDQogIHtbJiomXX0gIHsNCiAgICAgICAgW1NUQVRocmVhZF0NCiAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQ0KICAgICAgICB7DQogICAge1smKiZdfSAgICAgICAgSGVsbG9Xb3JsZCBhcHAgPSBuZXcgSGVsbG9Xb3JsZCgpOw0KICAgICAgICAgICAgYXBwLkdvKCk7DQogICAgICAgIH17WyYqJl19DQoNCiAgICAgICAgcHVibGljIEhlbGxvV29ybGQoKQ0KICAgICAgICB7DQogICAgICAgICAgICBWaWRlby5TZXRWaWRlb01vZGUoNHtbJiomXX0wMCwgMzAwKTsNCiAgICAgICAgICAgIFZpZGVvLldpbmRvd0NhcHRpb24gPSBcIkhlbGxvIFdvcmxkIVwiOw0KICAgICAgICB9DQoNCiB7WyYqJl19ICAgICAgIHB1YmxpYyB2b2lkIEdvKCkNCiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLktleWJvYXJkRG93biArPSBuZXcgRXtbJiomXX12ZW50SGFuZGxlcihFdmVudHNfS2V5Ym9hcmREb3duKTsNCiAgICAgICAgICAgIEV2ZW50cy5SdW4oKTsNCiAgICAgICAgfQ0KDQoge1smKiZdfSAgICAgICB2b2lkIEV2ZW50c19LZXlib2FyZERvd24ob2JqZWN0IHNlbmRlciwgU2RsRG90TmV0LklucHV0LktleWJvYXJkRXZlbnR7WyYqJl19QXJncyBlKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoZS5LZXkgPT0gU2RsRG90TmV0LklucHV0LktleS5Fc2NhcGUpIEV2ZXtbJiomXX1udHMuUXVpdEFwcGxpY2F0aW9uKCk7DQogICAgICAgIH0NCiAgICB9DQp9DQpcIjt7WyYqJl19[[/code]</p>
<p>Dunque, cosa abbiamo di diverso? Sicuramente l'istruzione</p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="font-size: small;"><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx"><span>Events</span></span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"><span>.KeyboardDown += </span></span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx"><span>new</span></span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"><span> </span></span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx"><span>EventHandler</span></span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"><span>&lt;SdlDotNet.Input.</span></span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx"><span>KeyboardEventArgs</span></span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"><span>&gt;(Events_KeyboardDown);</span></span></span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"><span><br />
</span></span></span></span></span></p>
<p>E... cosa vorrebbe dire?</p>
<p>Semplicemente, che abbiamo gestito l'evento che si verificherà alla pressione di un tasto sulla nostra  tastiera.<br />
Ehm... cioè? <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Spieghiamoci meglio: ogni volta che il nostro giocatore premerà un pulsante sulla tastiera, verrà eseguito il metodo Events_KeyboardDown. Ecco quindi che troviamo il codice del metodo:</p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">void</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> Events_KeyboardDown(</span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">object</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> sender, SdlDotNet.Input.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">KeyboardEventArgs</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> e)</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;">{</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">if</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> (e.Key == SdlDotNet.Input.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Key</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Escape) </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.QuitApplication();</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;">}</span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx">Come parametri in ingresso passeremo un oggetto sender e un KeyboardEventArgs chiamato “e”. Soprattutto questo sarà importantissimo, come vedremo tra poco. Ed infatti ecco l'istruzione chiave che spiega questo nuovo concetto:</p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #0000ff;"><span style="font-size: x-small;"><span>if</span></span></span><span style="font-size: x-small;"><span> (e.Key == SdlDotNet.Input.</span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span>Key</span></span></span><span style="font-size: x-small;"><span>.Escape) </span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span>Events</span></span></span><span style="font-size: x-small;"><span>.QuitApplication();</span></span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx">Non è molto difficile da capire: in poche parole qui si dice al nostro caro programma che ogni volta che l'utente premerà il tasto Escape (ESC) il programma dovrà terminare, tramite la chiamata al metodo QuitApplication, già menzionato precedentemente.</p>
<p>Avviando il nostro programma di prova premendo F5, potremo subito verificare i risultati. Premendo Esc, infatti, l'applicazione terminerà facendoci tornare alla schermata del nostro IDE (ho scritto F5 perchè do per scontato l'uso del Visual C# Express, che agevola di molto le cose).</p>
<p style="margin-bottom: 0cm;" lang="zxx">L'oggetto "e" che passiamo, inoltre, offre svariate possibilità grazie alle sue proprietà: la booleana Down, che restituisce true se un tasto è stato premuto. Oppure ancora Unicode ed UnicodeCharacter, che forniscono informazioni sul carattere Unicode rappresentato dal tasto appena premuto. Ciò, quindi, lascia spazio per un buon numero di possibilità e personalizzazioni.</p>
<p style="margin-bottom: 0cm;" lang="zxx">Passiamo ora a dare un occhiata al Mouse: anche in questo caso abbiamo un buon numero di eventi da gestire e metodi pronti da usare per facilitare il nostro lavoro. Un esempio pratico è rappresentato dal codice di seguito.</p>
<p style="margin-bottom: 0cm;" lang="zxx">
<p>[code]]czoxNjg0OlwiDQp1c2luZyBTeXN0ZW07DQoNCnVzaW5nIFNkbERvdE5ldC5Db3JlOw0KdXNpbmcgU2RsRG90TmV0LkdyYXBoaWNzOw17WyYqJl19Cg0KbmFtZXNwYWNlIFNkbERvdE5ldEV4YW1wbGVzLlNtYWxsRGVtb3MNCnsNCnB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkDQp7DQpGb3tbJiomXX1udCBmMSA9IG5ldyBGb250KFwiQ2FsaWJyaS50dGZcIiwgMTIpOw0KDQp1c2luZyBTeXN0ZW07DQoNCnVzaW5nIFNkbERvdE5ldC5Db3J7WyYqJl19ZTsNCnVzaW5nIFNkbERvdE5ldC5HcmFwaGljczsNCg0KbmFtZXNwYWNlIFNkbERvdE5ldEV4YW1wbGVzLlNtYWxsRGVtb3MNCnsNCntbJiomXX0gICAgcHVibGljIGNsYXNzIEhlbGxvV29ybGQNCiAgICB7DQogICAgICAgIEZvbnQgZjEgPSBuZXcgRm9udChcIkNhbGlicmkudHRmXCJ7WyYqJl19LCAxMik7DQoNCiAgICAgICAgc3RyaW5nIHBvc2l6aW9uZSA9IFwiXCI7DQoNCiAgICAgICAgW1NUQVRocmVhZF0NCiAgICAgICAgcHVie1smKiZdfWxpYyBzdGF0aWMgdm9pZCBNYWluKCkNCiAgICAgICAgew0KICAgICAgICAgICAgSGVsbG9Xb3JsZCBhcHAgPSBuZXcgSGVsbG9Xb3J7WyYqJl19bGQoKTsNCiAgICAgICAgICAgIGFwcC5HbygpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHVibGljIEhlbGxvV29ybGQoKQ0KICAgIHtbJiomXX0gICAgew0KICAgICAgICAgICAgVmlkZW8uU2V0VmlkZW9Nb2RlKDQwMCwgMzAwKTsNCiAgICAgICAgICAgIFZpZGVvLldpbmRvd0Nhe1smKiZdfXB0aW9uID0gXCJIZWxsbyBXb3JsZCFcIjsNCiAgICAgICAgfQ0KICAgICAgICBwdWJsaWMgdm9pZCBHbygpDQogICAgICAgIHsNCiAgIHtbJiomXX0gICAgICAgICBFdmVudHMuS2V5Ym9hcmREb3duICs9IG5ldyBFdmVudEhhbmRsZXIoRXZlbnRzX0tleWJvYXJkRG93bik7DQogICAge1smKiZdfSAgICAgICAgRXZlbnRzLk1vdXNlTW90aW9uICs9IG5ldyBFdmVudEhhbmRsZXIoRXZlbnRzX01vdXNlTW90aW9uKTsNCiAgICAgICB7WyYqJl19ICAgICBFdmVudHMuVGljayArPSBuZXcgRXZlbnRIYW5kbGVyKEV2ZW50c19UaWNrKTsNCiAgICAgICAgICAgIEV2ZW50cy5SdW4oKXtbJiomXX07DQogICAgICAgIH0NCg0KICAgICAgICB2b2lkIEV2ZW50c19UaWNrKG9iamVjdCBzZW5kZXIsIFRpY2tFdmVudEFyZ3MgZSkNCiAge1smKiZdfSAgICAgIHsNCiAgICAgICAgICAgIFZpZGVvLlNjcmVlbi5GaWxsKFN5c3RlbS5EcmF3aW5nLkNvbG9yLkJsYWNrKTsNCiAgICAgICB7WyYqJl19ICAgICBWaWRlby5TY3JlZW4uQmxpdChmMS5SZW5kZXIocG9zaXppb25lLCBTeXN0ZW0uRHJhd2luZy5Db2xvci5XaGl0ZSksIG5ld3tbJiomXX0gU3lzdGVtLkRyYXdpbmcuUG9pbnQoMjAsIDIwKSk7DQogICAgICAgICAgICBWaWRlby5TY3JlZW4uVXBkYXRlKCk7DQogICAgICAge1smKiZdfSB9DQoNCiAgICAgICAgdm9pZCBFdmVudHNfTW91c2VNb3Rpb24ob2JqZWN0IHNlbmRlciwgU2RsRG90TmV0LklucHV0Lk1vdXNlTW97WyYqJl19dGlvbkV2ZW50QXJncyBlKQ0KICAgICAgICB7DQogICAgICAgICAgICBwb3NpemlvbmUgPSBcIk1vdXNlIC0gWDogXCIgKyBlLlkuVG9Te1smKiZdfXRyaW5nKCkgKyBcIiwgWTogXCIgKyBlLlguVG9TdHJpbmcoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZvaWQgRXZlbnRzX0tleWJvYXtbJiomXX1yZERvd24ob2JqZWN0IHNlbmRlciwgU2RsRG90TmV0LklucHV0LktleWJvYXJkRXZlbnRBcmdzIGUpDQogICAgICAgIHsNCiAgICAge1smKiZdfSAgICAgICBpZiAoZS5LZXkgPT0gU2RsRG90TmV0LklucHV0LktleS5Fc2NhcGUpIEV2ZW50cy5RdWl0QXBwbGljYXRpb24oKTsNCiB7WyYqJl19ICAgICAgIH0NCiAgICB9DQp9DQpcIjt7WyYqJl19[[/code]<br />
Qui cosa abbiamo fatto? Andiamo con ordine. L'obiettivo di questo programma non è niente di eccezionale: leggendo ogni spostamento del mouse, riportiamo a schermo le sue coordinate. Queste saranno memorizzate in una stringa che verrà utilizzata con un font.</p>
<p>Ecco che dichiariamo la nostra stringa (inizialmente vuota) “posizione” e il nostro font f1(ricordate che il file del carattere da utilizzare dovrà essere ubicato nella stessa cartella dell'eseguibile che compileremo):</p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Font</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> f1 = </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">new</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Font</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">(</span></span></span><span style="color: #a31515;"><span style="font-size: x-small;"><span lang="zxx">"Calibri.ttf"</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">, 12);</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #0000ff;"><span style="font-size: x-small;">string</span></span><span style="font-size: x-small;"> posizione = </span><span style="color: #a31515;"><span style="font-size: x-small;">""</span></span><span style="font-size: x-small;">;</span></span></span></p>
<p>Adesso andiamo a gestire l'evento relativo al movimento del mouse, che si chiama MouseMotion:</p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">public</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">void</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> Go()</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;">{</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.KeyboardDown += </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">new</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">EventHandler</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&lt;SdlDotNet.Input.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">KeyboardEventArgs</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&gt;(Events_KeyboardDown);</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.MouseMotion += </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">new</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">EventHandler</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&lt;SdlDotNet.Input.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">MouseMotionEventArgs</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&gt;(Events_MouseMotion);</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Tick += </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">new</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">EventHandler</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&lt;</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">TickEventArgs</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&gt;(Events_Tick);</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Run();</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;">}</span></span></p>
<p>Il metodo che lanceremo per gestire la procedura sarà Events_MouseMotion. Il nome è creato automaticamente dal sistema, ma potete crearne uno direttamente voi. L'ho fatto per comodità e per il fatto che viene generato al volo dall'Intellisense del Visual Studio, alla semplice pressione del tasto Tab. Comunque, ecco il nostro codice:</p>
<p><!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">void</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> Events_MouseMotion(</span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">object</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> sender, SdlDotNet.Input.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">MouseMotionEventArgs</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> e)</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">{</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> <span style="font-size: x-small;"><span lang="zxx">posizione = </span></span></span><span style="color: #a31515;"><span style="font-size: x-small;"><span lang="zxx">"Mouse - X: "</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> + e.X.ToString() + </span></span></span><span style="color: #a31515;"><span style="font-size: x-small;"><span lang="zxx">", Y: "</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> + e.Y.ToString();</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">}</span></span></p>
<p>Anche stavolta abbiamo un oggetto sender ed uno “e”, stavolta però di tipo MouseMotionEventArgs. Quindi, cosa fa questo metodo? Semplicemente, ogni volta che il sistema rileva uno spostamento del mouse assegneremo alla stringa “posizione” i valori di X ed Y che il mouse assume in quel momento. Finchè il mouse non verrà mosso, i valori non cambieranno ulteriormente.</p>
<div id="attachment_96" class="wp-caption aligncenter" style="width: 427px"><img class="size-full wp-image-96" title="finestra1" src="http://francescomalatesta.net/wp-content/uploads/2009/11/finestra1.jpg" alt="Una schermata del programma di Prova." width="417" height="336" /><p class="wp-caption-text">Una schermata del programma di Prova.</p></div>
<p>Occorre anche in questo caso fare una bella scarrellata di proprietà che ci vengono messe a disposizione dall'oggetto “e”. Non le riporto tutte ovviamente, ma solo alcune:</p>
<ul>
<li>X ed Y: due proprietà che indicano la posizione sull'asse X ed Y del mouse allo stato attuale del sistema;</li>
<li> Button: restituisce il nome del pulsante del mouse attualmente premuto usando come valori possibili l'enumerazione Input.MouseButton;</li>
<li> ButtonPressed: booleana che restituisce True nel caso un pulsante sia stato premuto.</li>
</ul>
<p>Questi strumenti permettono di gestire al meglio l'input da parte dell'utente, sfruttando le potenzialità del classico metodo “mouse più tastiera” tipico della grande maggioranza di giochi in circolazione negli ultimi anni.</p>
<p>Spero di essere stato chiaro in queste spiegazioni. Vi consiglio assolutamente di fare molte prove e, come già detto precedentemente, sperimentare per bene il sistema ad eventi se non lo si è capito bene. Specialmente adesso, forti di queste nuove piccole nozioni. Con queste basi, molto presto saremo pronti ad affrontare la creazione di un piccolo gioco vero e proprio.</p>
<p>Alla prossima!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F11%2F21%2Finput-mouse-e-tastiera-guida-sdl-net%2F&amp;linkname=Input%20%26%238211%3B%20Mouse%20e%20Tastiera%20%26%238211%3B%20Guida%20SDL.NET"><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/11/21/input-mouse-e-tastiera-guida-sdl-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Output &#8211; Fonts &#8211; Guida SDL.NET</title>
		<link>http://francescomalatesta.net/2009/11/18/output-fonts-guida-sdl-net/</link>
		<comments>http://francescomalatesta.net/2009/11/18/output-fonts-guida-sdl-net/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:17:00 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[SDL.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[fonts]]></category>
		<category><![CDATA[giochi]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[output]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=72</guid>
		<description><![CDATA[Come potrete facilmente immaginare, le immagini non sono l&#8217;unica componente grafica di un gioco. Molto spesso, infatti, anche nel gioco più semplice dobbiamo fare uso dei font: si pensi alla creazione delle GUI, delle varie interfacce o anche al punteggio del più semplicistico clone di pong. Insomma, per poter fare qualcosa di decente abbiamo bisogno [...]]]></description>
			<content:encoded><![CDATA[<p>Come potrete facilmente immaginare, le immagini non sono l&#8217;unica componente grafica di un gioco. Molto spesso, infatti, anche nel gioco più semplice dobbiamo fare uso dei font: si pensi alla creazione delle GUI, delle varie interfacce o anche al punteggio del più semplicistico clone di  pong.</p>
<p>Insomma, per poter fare qualcosa di decente abbiamo bisogno di uno strumento versatile che ci consenta di gestire i fonts e l&#8217;output testuale senza troppi problemi. In nostro aiuto, per quanto riguarda l&#8217;SDL.NET, arriva la classe Font. E sarà proprio nelle prossime righe che cercheremo di analizzare, almeno nelle sue basi, questo utile strumento.</p>
<p>Per prima cosa vediamo come iniziare ad usare un oggetto di questo tipo.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm; font-weight: normal;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #2b91af;"><span style="font-size: x-small;">Font</span></span><span style="font-size: x-small;"> f1 = </span><span style="color: #0000ff;"><span style="font-size: x-small;">new</span></span><span style="font-size: x-small;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;">Font</span></span><span style="font-size: x-small;">(</span><span style="color: #a31515;"><span style="font-size: x-small;">&#8220;font1.ttf&#8221;</span></span><span style="font-size: x-small;">, 14);</span></span></span></p>
<p>f1 è un oggetto di tipo Font. Nel nostro caso, al costruttore passiamo una stringa con il nome del font utilizzato ed un intero che indica la grandezza del testo. Nulla di più semplice ed intuitivo. Dopo questa dichiarazione, in memoria abbiamo già il nostro font pronto ad essere utilizzato.</p>
<p>Adesso però dobbiamo scrivere qualcosa: ecco, qui di seguito, il codice che ci serve.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm; font-weight: normal;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #2b91af;"><span style="font-size: x-small;">Surface</span></span><span style="font-size: x-small;"> testo = f1.Render(</span><span style="color: #a31515;"><span style="font-size: x-small;">&#8220;testo da scrivere!&#8221;</span></span><span style="font-size: x-small;">, System.Drawing.</span><span style="color: #2b91af;"><span style="font-size: x-small;">Color</span></span><span style="font-size: x-small;">.Black);</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Surface</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> testo = f1.Render(</span></span></span><span style="color: #a31515;"><span style="font-size: x-small;"><span lang="zxx">&#8220;testo da scrivere!&#8221;</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">, System.Drawing.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Color</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Black, System.Drawing.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Color</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.White);</span></span></span></p>
<p>Volendo spiegare in parole povere il funzionamento del meccanismo, pensate alla surface testo come un “foglio”, e all&#8217;oggetto f1 come una “stampante”. Nella prima riga di codice che ho riportato stiamo dicendo ad f1 di “stampare” sulla Surface &#8220;testo&#8221; la stringa “testo da scrivere!”, in colore nero. La surface, successivamente, sarà pronta per essere utilizzata. Il metodo Render ha svariati overload, tra cui l&#8217;altro che ho riportato: oltre al testo e il colore, nel metodo passiamo come terzo argomento anche il colore di sfondo da utilizzare.</p>
<p>La personalizzazione del testo, tuttavia, non finisce qui: la classe Font mette a disposizione svariate proprietà di customizzazione e formattazione, per fornire la massima flessibilità. Di seguito qualche esempio.</p>
<ul>
<li><strong>Proprietà Bold</strong>: permette di decidere se il testo da renderizzare sarà in grassetto oppure no. Di default, questa proprietà è settata su False.</li>
<li> <strong>Proprietà Italic</strong>: in questo caso possiamo decidere se il nostro testo sarà in corsivo oppure no. La proprietà è impostata su False di default.</li>
<li> <strong>Proprietà Underline</strong>: Impostata su False normalmente, questa proprietà consente di decidere se il testo da renderizzare sarà sottolineato.</li>
</ul>
<p>Oltre a queste proprietà c&#8217;è un&#8217;altra che riassume tutte e tre contemporaneamente, che si chiama Style. I valori che può assumere sono compresi nell&#8217;enumerazione SdlDotNet.Graphics.Styles. Ecco un esempio pratico qui di seguito.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">f1.Style = </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Styles</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Underline;</span></span></span></span></p>
<p>Insomma, la gestione del testo, almeno a livello base,è veramente molto semplice e facile da capire. Ovviamente, le cose si possono complicare se ci sono necessità riguardanti, per esempio, testi multilinea: a tutto però c&#8217;è una soluzione. Ma per adesso rimarremo sul semplice.</p>
<p>Come avete potuto notare dagli esempi (e se non l&#8217;avete notato ci penso io <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) i colori usati nei testi e negli sfondi sono quelli compresi nella struct System.Drawing.Colors. In questo modo avremo già pronti un sacco di colori.</p>
<p>Ma cosa fare se abbiamo necessità di utilizzare un colore di cui conosciamo perfettamente i valori RGB? Non c&#8217;è problema, ecco la sintassi!</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">f1.Render(</span></span></span><span style="color: #a31515;"><span style="font-size: x-small;"><span lang="zxx">&#8220;testo da scrivere!&#8221;</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">, System.Drawing.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Color</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.FromArgb(0, 0, 0));</span></span></span></span></p>
<p>La struttura Color infatti presenta il metodo FromArgb, dove rgb sta per Red, Green e Blue. Un attimo.. ma la A? FromArgb presenta anche due overload, ed uno sguardo veloce all&#8217;intellisense permette di capire subito di cosa si tratta: parliamo di Alpha, ed il valore che può assumere va da 0 a 255.</p>
<p>Un&#8217;altro overload di FromArgb consente invece di fornire come parametro un int a 32 bit nel quale specificare il numero ARGB che rappresenta il nostro colore. Come potete vedere c&#8217;è l&#8217;imbarazzo della scelta anche in questo caso.</p>
<p>Prima di concludere questa parte, dovete sapere che esiste anche un altro strumento per gestire i testi: parlo di TextSprite, contenuto in SdlDotNet.Graphics.Sprites. Stavolta, però, ci si ferma alla gestione base dei fonts e riprenderemo il discorso successivamente.</p>
<p>Adesso, infatti, lasciamo perdere per un po&#8217; il mondo della vista, per addentrarci in quello dell&#8217;udito <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Nel prossimo articolo parleremo di Audio per i nostri programmi.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F11%2F18%2Foutput-fonts-guida-sdl-net%2F&amp;linkname=Output%20%26%238211%3B%20Fonts%20%26%238211%3B%20Guida%20SDL.NET"><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/11/18/output-fonts-guida-sdl-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Output &#8211; Immagini &#8211; Guida SDL.NET</title>
		<link>http://francescomalatesta.net/2009/11/18/output-immagini-guida-sdl-net/</link>
		<comments>http://francescomalatesta.net/2009/11/18/output-immagini-guida-sdl-net/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:14:15 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[SDL.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[giochi]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[immagini]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[surface]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=65</guid>
		<description><![CDATA[E&#8217; tempo di mostrare qualcosa sullo schermo, vero? Sono d&#8217;accordo con voi, iniziamo a parlare delle Surface, i primi oggetti che ci accompagneranno nella rappresentazione su schermo dei nostri file grafici. Volendo tradurre alla lettera dalla Wiki ufficiale, possiamo ottenere la spiegazione più esatta per questa classe: &#8220;Le Surface in SDL.NET rappresentano, genericamente, delle informazioni [...]]]></description>
			<content:encoded><![CDATA[<p>E&#8217; tempo di mostrare <strong>qualcosa sullo schermo</strong>, vero? Sono d&#8217;accordo con voi, iniziamo a parlare delle <strong>Surface</strong>, i primi oggetti che ci accompagneranno nella rappresentazione su schermo dei nostri file grafici. Volendo tradurre alla lettera dalla Wiki ufficiale, possiamo ottenere la spiegazione più esatta per questa classe:</p>
<p>&#8220;Le Surface in SDL.NET rappresentano, genericamente, delle informazioni grafiche. E&#8217; possibile crearle da zero (e quindi disegnarci ciò che si vuole) oppure caricando dei files dal disco fisso o da un array di bytes. Ogni Surface ha una propria larghezza ed altezza e possiedono delle funzionalità di disegno sulla superficie stessa.&#8221;</p>
<p>Le cose non sono ancora chiare? Tranquilli, ecco un bel <strong>programma di prova</strong>, che verrà prontamente spiegato.</p>
<p>[code]]czoxMDg3OlwiDQp1c2luZyBTeXN0ZW07DQoNCnVzaW5nIFNkbERvdE5ldC5Db3JlOw0KdXNpbmcgU2RsRG90TmV0LkdyYXBoaWNzOw17WyYqJl19Cg0KbmFtZXNwYWNlIERlbW8NCnsNCiAgICBwdWJsaWMgY2xhc3MgR2FtZQ0KICAgIHsNCiAgICAgICAgU3VyZmFjZSBzY2hlcm1hdHtbJiomXX1hID0gVmlkZW8uU2V0VmlkZW9Nb2RlKDgwMCwgNjAwKTsNCiAgICAgICAgU3VyZmFjZSBpbW1hZ2luZSA9IG5ldyBTdXJmYWNlKFwiaXtbJiomXX1tbWFnaW5lLmpwZ1wiKTsNCg0KICAgICAgICBbU1RBVGhyZWFkXQ0KICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpDQogIHtbJiomXX0gICAgICB7DQogICAgICAgICAgICBHYW1lIGFwcCA9IG5ldyBHYW1lKCk7DQogICAgICAgICAgICBhcHAuR28oKTsNCiAgICAgICAge1smKiZdfX0NCg0KICAgICAgICBwdWJsaWMgR2FtZSgpDQogICAgICAgIHsNCiAgICAgICAgICAgIEV2ZW50cy5GcHMgPSA2MDsNCiAgICAgICB7WyYqJl19ICAgICBWaWRlby5XaW5kb3dDYXB0aW9uID0gXCJHZXN0aW9uZSBTdXJmYWNlIC0gU0RMLk5FVFwiOw0KICAgICAgICB9DQoNCiAgICAge1smKiZdfSAgIHB1YmxpYyB2b2lkIEdvKCkNCiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLlF1aXQgKz0gbmV3IEV2ZW50SGFuZGxlcjx7WyYqJl19UXVpdEV2ZW50QXJncz4odGhpcy5RdWl0KTsNCiAgICAgICAgICAgIEV2ZW50cy5UaWNrICs9IG5ldyBFdmVudEhhbmRsZXI8VGlja3tbJiomXX1FdmVudEFyZ3M+KEV2ZW50c19UaWNrKTsNCiAgICAgICAgICAgIEV2ZW50cy5SdW4oKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZve1smKiZdfWlkIEV2ZW50c19UaWNrKG9iamVjdCBzZW5kZXIsIFRpY2tFdmVudEFyZ3MgZSkNCiAgICAgICAgew0KICAgICAgICAgICAgc2NoZXJ7WyYqJl19bWF0YS5GaWxsKFN5c3RlbS5EcmF3aW5nLkNvbG9yLkJsYWNrKTsNCg0KICAgICAgICAgICAgc2NoZXJtYXRhLkJsaXQoaW1tYWdpbntbJiomXX1lKTsNCg0KICAgICAgICAgICAgc2NoZXJtYXRhLlVwZGF0ZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHJpdmF0ZSB2b2lkIFF1e1smKiZdfWl0KG9iamVjdCBzZW5kZXIsIFF1aXRFdmVudEFyZ3MgZSkNCiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLlF1aXRBcHBsaWN7WyYqJl19YXRpb24oKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NClwiO3tbJiomXX0=[[/code]</p>
<p>Partiamo dalle prime righe:</p>
<p style="margin-bottom: 0cm; font-style: normal; font-weight: normal;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #0000ff;"><span style="font-size: x-small;">using</span></span><span style="font-size: x-small;"> System;</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">using</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> SdlDotNet.Core;</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #0000ff;"><span style="font-size: x-small;">using</span></span><span style="font-size: x-small;"> SdlDotNet.Graphics;</span></span></span></p>
<p>Qua dovremmo esserci: includiamo i namespace che ci servono per i nostri scopi, attraverso la direttiva using.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;"><span style="color: #2b91af;">Surface </span>schermata = Video.SetVideoMode(800, 600);</span></span></p>
<p>Ecco la prima delle nostre Surface. Come detto precedentemente, queste possono essere create in vari modi: l'oggetto “schermata” che stiamo dichiarando è speciale: rappresenta infatti la finestra di gioco che noi utilizzeremo.</p>
<p>Il tutto viene reso possibile grazie al metodo SetVideoMode della classe Video, che restituisce appunto una Surface. In questo modo abbiamo deciso che la nostra finestra avrà una dimensione di 800 pixel per 600 pixel.</p>
<p>Ora abbiamo:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #2b91af;"><span style="font-size: x-small;">Surface</span></span><span style="font-size: x-small;"> immagine = </span><span style="color: #0000ff;"><span style="font-size: x-small;">new</span></span><span style="font-size: x-small;"> Surface(</span><span style="color: #a31515;"><span style="font-size: x-small;">"immagine.jpg"</span></span><span style="font-size: x-small;">);</span></span></span></p>
<p>Questa surface invece viene creata passando come argomento del metodo costruttore il nome del file da caricare. In questo caso caricheremo il file “immagine.jpg”, situato nella stessa cartella del nostro file exe compilato. Una volta che il nostro oggetto viene creato è pronto per essere mostrato. Continuiamo però con il codice:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;"><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">public</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> Game()</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">{</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Fps = 60;</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Video</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.WindowCaption = </span></span></span><span style="color: #a31515;"><span style="font-size: x-small;"><span lang="zxx">"Gestione Surface - SDL.NET"</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">}</span></span></p>
<p>Qui abbiamo il metodo costruttore della nostra classe Game, che svolge essenzialmente due operazioni: imposta il limite dei frame per secondo a 60 utilizzando la proprietà Fps della classe Events e cambia il titolo alla finestra del programma, stavolta utilizzando WindowCaption di Video. Molto semplice come concetto. Adesso:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #0000ff;"><span style="font-size: x-small;">public</span></span><span style="font-size: x-small;"> </span><span style="color: #0000ff;"><span style="font-size: x-small;">void</span></span><span style="font-size: x-small;"> Go()</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">{</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Quit += </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">new</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">EventHandler</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&lt;</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">QuitEventArgs</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&gt;(</span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">this</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Quit);</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Tick += </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">new</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx"> </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">EventHandler</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&lt;</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">TickEventArgs</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">&gt;(Events_Tick);</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Run();</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">}</span></span></p>
<p>Il metodo Go aggiunge gli Handler per gli eventi che vogliamo gestire: in questo caso ne abbiamo due: Quit, già visto in precedenza, e Tick. Tick permette di gestire ciò che succede ad ogni frame, risultando particolarmente utile nell'aggiornamento dei valori delle variabili in gioco. Stando al limite dato precedentemente, la nostra funzione Events_Tick viene eseguita 60 volte al secondo. Quello che facciamo nel metodo Events_Tick è spiegato nelle righe successive:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;"><span style="color: #0000ff;">void</span> Events_Tick(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">TickEventArgs</span> e)</span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">{</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> <span style="font-size: x-small;"><span lang="zxx">schermata.Fill(System.Drawing.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Color</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Black);</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx">
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">schermata.Blit(immagine);</span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx">
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">schermata.Update();</span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">}</span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;"> </span></span><br />
Ed ecco l'utilizzo effettivo delle nostre Surface! Come si può vedere, in questo metodo eseguiamo tre operazioni:</p>
<ol>
<li>Tramite la funzione Fill riempiamo tutta la schermata di nero. Può apparire insensato, ma pensate ad un file immagine con delle trasparenze (per esempio un file PNG) che si sposta nel tempo. Senza riempire lo schermo di nero tutte le volte avremmo un effetto fastidioso dovuto alla “non pulizia” della surface, se così la vogliamo chiamare.</li>
<li> Tramite il metodo Blit invece disegnamo la nostra immagine. Blit è un metodo che ha ben 8 overload: ciò vuol dire che ci sono ben 9 modalità diverse con cui disegnare sulle surface. Nel nostro caso abbiamo passato solo il nome della Surface da disegnare: questo vuol dire che le coordinate in cui verrà disegnata la nostra Surface saranno (0,0) rispetto alla “schermata”.</li>
<li> Il metodo Update si occupa infine di “aggiornare” il nostro frame e fare in modo che tutte le eventuali modifiche del sistema siano mostrate a schermo. Non dimenticatelo alla fine della fase di disegno, è importante!</li>
</ol>
<p>Ma torniamo al punto 2: perchè queste coordinate sono (0,0)? E' semplice da spiegare: la Surface “schermata” rappresenta la finestra stessa del programma. Di conseguenza, il punto situato più in alto a sinistra avrà delle coordinate pari a 0 sull'asse x ed altrettanto sulla y.</p>
<p>Per disegnare la nostra immagine in una posizione differente, la sintassi sarà la seguente:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;">schermata.Blit(immagine, <span style="color: #0000ff;">new</span> System.Drawing.<span style="color: #2b91af;">Point</span>(20, 20));</span></span></p>
<p><span style="color: #000000;"><span style="font-size: x-small;"> </span></span>Stavolta disegneremo la nostra immagine alle coordinate (20,20), e non più (0,0), sui nostri assi cartesiani. A tal proposito devo ricordarvi una cosa molto importante: gli assi cartesiani sullo schermo del pc sono ribaltati sull'asse Y. In poche parole, ecco due immagini per chiarire le idee.</p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-68" title="cartesiani-1" src="http://francescomalatesta.net/wp-content/uploads/2009/11/cartesiani-1.jpg" alt="cartesiani-1" width="450" height="350" /></p>
<p style="text-align: center;"><img class="alignnone size-full wp-image-69" title="cartesiani-2" src="http://francescomalatesta.net/wp-content/uploads/2009/11/cartesiani-2.jpg" alt="cartesiani-2" width="450" height="350" /></p>
<p>Ciò che abbiamo dopo il metodo Events_Tick è il codice del metodo Quit, che ci consente di uscire dal programma.</p>
<p>Tornando a parlare genericamente, l'oggetto Surface supporta una buona quantità di formati grafici:</p>
<ul>
<li> BMP</li>
<li> PNM</li>
<li> XPM</li>
<li> LBM</li>
<li> PCX</li>
<li> GIF</li>
<li> JPEG</li>
<li> PNG</li>
<li> TGA</li>
</ul>
<p><strong>Trasparenza</strong><br />
Ovviamente non è solo questo quello che dobbiamo dire riguardo alle Surface e al loro utilizzo. Un'altra feature molto utile è quella della gestione della trasparenza, che avviene tramite due proprietà:</p>
<ul>
<li>TransparentColor</li>
<li> Transparent</li>
</ul>
<p>Facciamo un esempio. Abbiamo un'immagine in un file PNG che vogliamo utilizzare come cursore del mouse nel nostro gioco. Caricandola e mostrandola sullo schermo tramite la procedura sopra mostrata, tuttavia, non avremmo il risultato desiderato: oltre a mostrare il cursore, infatti, verrebbe mostrato anche il quadrato in cui è contenuta l'immagine, ovvero tutto il file immagine, per intero. Come facciamo ad evitare questo problema?</p>
<p>Per prima cosa, dobbiamo specificare il colore di trasparenza del nostro file. Ecco un veloce esempio, usando sempre la nostra surface “immagine”:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx" align="LEFT"><span style="color: #000000;"><span style="font-size: x-small;">immagine.TransparentColor = System.Drawing.<span style="color: #2b91af;">Color</span>.White;</span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx" align="LEFT">In questo modo diciamo al sistema che, quando mostrerà a schermo la surface “immagine” dovrà ignorare tutti i pixel di colore bianco. Dopo questo, usiamo anche la proprietà Transparent, semplicemente impostandola su True. Ricordate che questo step è necessario.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p><span style="color: #000000;"><span style="font-size: x-small;">immagine.Transparent = <span style="color: #0000ff;">true</span>;</span></span></p>
<p>Adesso il nostro cursore sarà bello e pronto da mostrare senza problemi <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Ovviamente queste istruzioni è bene non metterle nel loop senza condizioni: io per esempio le metto nel metodo costruttore della mia classe. Ecco un esempio completo, per mostrare dove ho posizionato le istruzioni.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="zxx" align="LEFT"><span style="color: #000000;"><span style="font-size: x-small;"><span style="color: #0000ff;">public</span> Game()</span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">{</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> <span style="font-size: x-small;"><span lang="zxx">immagine.TransparentColor = System.Drawing.</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Color</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.White;</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> <span style="font-size: x-small;"><span lang="zxx">immagine.Transparent = </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">true</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx">
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Events</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.Fps = 60;</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"> </span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Video</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.WindowCaption = </span></span></span><span style="color: #a31515;"><span style="font-size: x-small;"><span lang="zxx">"Gestione Surface - SDL.NET"</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">;</span></span></span></p>
<p style="margin-bottom: 0cm;" lang="zxx"><span style="color: #000000;"> <span style="font-size: x-small;">}</span></span></p>
<p><strong>Alpha Blending</strong></p>
<p>Anche l'Alpha Blending è decisamente semplice da utilizzare. Come per la trasparenza, dovremo scrivere solamente due righe di codice, utilizzando due proprietà:</p>
<ul>
<li>Alpha</li>
<li> AlphaBlending</li>
</ul>
<p>Alpha è di tipo byte e va da 0 a 255. Impostandolo su 0 avremo la totale trasparenza della surface. A 255 invece la surface sarà totalmente visibile. Dopo aver impostato l'Alpha procediamo quindi ad attivare l'AlphaBlending impostando la proprietà su true, proprio come per la trasparenza. Se non effettuiamo quest'ultimo passo la proprietà Alpha verrà ignorata.</p>
<p>Ecco un esempio:</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm; font-weight: normal;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;">immagine.Alpha = <span style="color: #2b91af;">Convert</span>.ToByte(255);</span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">immagine.Alpha = </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span lang="zxx">Convert</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">.ToByte(0);</span></span></span></p>
<p style="margin-bottom: 0cm;"><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">immagine.AlphaBlending = </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span lang="zxx">true</span></span></span><span style="color: #000000;"><span style="font-size: x-small;"><span lang="zxx">;</span></span></span></p>
<p>Come suggerisce anche la Wiki ufficiale, un uso saggio delle surface può essere anche l'uso delle SurfaceCollections, ovvero strutture dinamiche che permettono di gestire altrettanto dinamicamente questo tipo di oggetto. Tuttavia ne parleremo più in la, magari quando riuscirò a scrivere una sorta di sezione “avanzata” di questa guida. Per ora, per quanto riguarda le surface, è tutto!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F11%2F18%2Foutput-immagini-guida-sdl-net%2F&amp;linkname=Output%20%26%238211%3B%20Immagini%20%26%238211%3B%20Guida%20SDL.NET"><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/11/18/output-immagini-guida-sdl-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eventi &#8211; Guida SDL.NET</title>
		<link>http://francescomalatesta.net/2009/11/16/eventi-guida-sdl-net/</link>
		<comments>http://francescomalatesta.net/2009/11/16/eventi-guida-sdl-net/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 15:43:07 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[SDL.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[eventi]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[giochi]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=47</guid>
		<description><![CDATA[Ok, eccoci arrivati agli Eventi: per poter comprendere al meglio quest&#8217;importante concetto, riprendiamo il codice che avevamo usato nel nostro Hello World. Per non farvi perdere tempo tornando indietro, ve lo ripropongo qui: &#8211; [code]]czo3MTQ6XCINCnVzaW5nIFNkbERvdE5ldC5Db3JlOw0KDQp1c2luZyBTZGxEb3ROZXQuR3JhcGhpY3M7DQoNCm5hbWVzcGFjZSBTZGx7WyYqJl19RG90TmV0RXhhbXBsZXMuU21hbGxEZW1vcw0Kew0KDQogICAgcHVibGljIGNsYXNzIEhlbGxvV29ybGQNCiAgICB7DQogICAgICAgIHtbJiomXX1bU1RBVGhyZWFkXQ0KICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpDQogICAgICAgIHsNCiAgICAgICAgICAgIEhlbGxve1smKiZdfVdvcmxkIGFwcCA9IG5ldyBIZWxsb1dvcmxkKCk7DQogICAgICAgICAgICBhcHAuR28oKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHB7WyYqJl19dWJsaWMgSGVsbG9Xb3JsZCgpDQogICAgICAgIHsNCiAgICAgICAgICAgIFZpZGVvLlNldFZpZGVvTW9kZSg0MDAsIDMwMCk7DQogIHtbJiomXX0gICAgICAgICAgVmlkZW8uV2luZG93Q2FwdGlvbiA9IFwiSGVsbG8gV29ybGQhXCI7DQogICAgICAgIH0NCg0KICAgICAgICBwdWJsaWN7WyYqJl19IHZvaWQgR28oKQ0KICAgICAgICB7DQogICAgICAgICAgICBFdmVudHMuUXVpdCArPSBuZXcgRXZlbnRIYW5kbGVyPFF1aXRFdmVudHtbJiomXX1BcmdzPih0aGlzLlF1aXQpOw0KICAgICAgICAgICAgRXZlbnRzLlJ1bigpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHJpdmF0ZSB2e1smKiZdfW9pZCBRdWl0KG9iamVjdCBzZW5kZXIsIFF1aXRFdmVudEFyZ3MgZSkNCiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLlF1aXR7WyYqJl19QXBwbGljYXRpb24oKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NClwiO3tbJiomXX0=[[/code] -- Per prima cosa, analizziamo il metodo Go. All'interno di esso, analizziamo il primo comando, ovvero: Events.Quit += new EventHandler&#60;QuitEventArgs&#62;(this.Quit); [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, eccoci arrivati agli <strong>Eventi</strong>: per poter comprendere al meglio quest&#8217;importante concetto, riprendiamo il codice che avevamo usato nel nostro Hello World. Per non farvi perdere tempo tornando indietro, ve lo ripropongo qui:</p>
<p style="text-align: center;">&#8211;</p>
<p>[code]]czo3MTQ6XCINCnVzaW5nIFNkbERvdE5ldC5Db3JlOw0KDQp1c2luZyBTZGxEb3ROZXQuR3JhcGhpY3M7DQoNCm5hbWVzcGFjZSBTZGx7WyYqJl19RG90TmV0RXhhbXBsZXMuU21hbGxEZW1vcw0Kew0KDQogICAgcHVibGljIGNsYXNzIEhlbGxvV29ybGQNCiAgICB7DQogICAgICAgIHtbJiomXX1bU1RBVGhyZWFkXQ0KICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpDQogICAgICAgIHsNCiAgICAgICAgICAgIEhlbGxve1smKiZdfVdvcmxkIGFwcCA9IG5ldyBIZWxsb1dvcmxkKCk7DQogICAgICAgICAgICBhcHAuR28oKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHB7WyYqJl19dWJsaWMgSGVsbG9Xb3JsZCgpDQogICAgICAgIHsNCiAgICAgICAgICAgIFZpZGVvLlNldFZpZGVvTW9kZSg0MDAsIDMwMCk7DQogIHtbJiomXX0gICAgICAgICAgVmlkZW8uV2luZG93Q2FwdGlvbiA9IFwiSGVsbG8gV29ybGQhXCI7DQogICAgICAgIH0NCg0KICAgICAgICBwdWJsaWN7WyYqJl19IHZvaWQgR28oKQ0KICAgICAgICB7DQogICAgICAgICAgICBFdmVudHMuUXVpdCArPSBuZXcgRXZlbnRIYW5kbGVyPFF1aXRFdmVudHtbJiomXX1BcmdzPih0aGlzLlF1aXQpOw0KICAgICAgICAgICAgRXZlbnRzLlJ1bigpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHJpdmF0ZSB2e1smKiZdfW9pZCBRdWl0KG9iamVjdCBzZW5kZXIsIFF1aXRFdmVudEFyZ3MgZSkNCiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLlF1aXR7WyYqJl19QXBwbGljYXRpb24oKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NClwiO3tbJiomXX0=[[/code]</p>
<p style="text-align: center;" lang="zxx"><span style="color: #000000;"><span style="font-size: x-small;">--</span></span></p>
<p style="margin-bottom: 0cm; font-style: normal; font-weight: normal; text-align: left;" lang="zxx">Per prima cosa, analizziamo il <strong>metodo Go</strong>. All'interno di esso, analizziamo il primo comando, ovvero:</p>
<p lang="zxx"><span style="color: #000000;"><span style="font-size: small;"><span style="color: #2b91af;"><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">Events</span></span></span></span><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">.Quit += </span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">new</span></span></span></span><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;"> </span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">EventHandler</span></span></span></span><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">&lt;</span></span></span><span style="color: #2b91af;"><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">QuitEventArgs</span></span></span></span><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">&gt;(</span></span></span><span style="color: #0000ff;"><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">this</span></span></span></span><span style="font-size: x-small;"><span style="font-style: normal;"><span style="font-weight: normal;">.Quit);</span></span></span></span></span></p>
<p lang="zxx">Che cosa abbiamo fatto? Semplice, <strong>abbiamo appena gestito un evento del programma</strong>. Ma cosa vuol dire tutto questo? Quando noi creiamo un gioco con SDL.NET, <strong>esistono degli "Eventi" che vengono eseguiti in determinate condizioni</strong>: per esempio il OnKeyboardDown, che viene lanciato tutte le volte che premiamo un pulsante sulla tastiera.</p>
<p lang="zxx">Oppure l'evento<strong> Tick</strong>, che viene lanciato ad <strong>ogni fotogramma</strong>. O ancora, l'evento <strong>Quit</strong>, che abbiamo visto nel nostro codice, <strong>che viene eseguito prima di uscire dal programma</strong>. In questo modo il lavoro che il software deve fare può essere alleggerito di tanto.</p>
<p lang="zxx">Ecco quindi spiegata la riga di codice: in poche parole noi <strong>associamo un metodo da noi creato</strong> (il Quit) <strong>ad un evento previsto dal sistema</strong> (Events.Quit). Nel nostro caso il metodo Quit è un semplice metodo che consente di uscire dall'applicazione attraverso il metodo Events.QuitApplication(). Scritto in questo modo, potrebbe non significare molto.</p>
<p lang="zxx">Ma nel caso, in fase di uscita, si vogliano cancellare delle variabili, allora possiamo mettere nel nostro metodo Quit() ciò che serve. Spero di essere stato chiaro e vi consiglio di fare molte prove per capire bene il funzionamento del sistema.</p>
<p lang="zxx">Sulla Wiki ufficiale del progetto c'è scritto che<strong> il sistema degli eventi è molto utile ed intuitivo in fase di gestione dell'input</strong>. Senza dubbio vero, ma non è di certo tutto: <strong>c'è una grande agevolazione anche nella gestione di musica</strong> (per esempio l'evento MusicFinished, che come suggerisce il nome viene lanciato solo quando termina l'esecuzione di un brano musicale), <strong>delle finestre</strong> (VideoResize, indovinate che fa? <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) e di altri aspetti che in seguito analizzeremo meglio.</p>
<p lang="zxx">Tra i comandi scritti nel metodo Go, inoltre, troviamo anche Run. <strong>Run è un metodo importantissimo</strong> per il gioco, in quanto è proprio esso che avvia il <strong>loop principale del programma</strong>, il ciclo che verrà eseguito fin quando non decideremo di uscire.</p>
<p lang="zxx">Oltre a Run ecco <strong>altri metodi della classe Events</strong>:</p>
<ul>
<li><strong>CloseAudio, CloseMixer, CloseJoystick</strong> e così via, che chiudono i sottosistemi SDL indicati;</li>
<li><strong>Close</strong>, che chiude tutti i sottosistemi dell'SDL.</li>
<li><strong>QuitApplication</strong>, che permette l'uscita dal programma.</li>
</ul>
<p lang="zxx">Un saggio uso degli eventi, insomma, aiuta tantissimo nello sviluppo della propria applicazione, oltre a garantire una facile lettura del codice e manutenzione. Che altro potrei dire? In realtà ben poco, ho già parlato abbastanza. Andiamo avanti ed iniziamo a vedere come si può caricare un immagine e visualizzarla su schermo.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F11%2F16%2Feventi-guida-sdl-net%2F&amp;linkname=Eventi%20%26%238211%3B%20Guida%20SDL.NET"><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/11/16/eventi-guida-sdl-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prima di Iniziare &#8211; Guida SDL.NET</title>
		<link>http://francescomalatesta.net/2009/11/16/prima-di-iniziare-guida-sdl-net/</link>
		<comments>http://francescomalatesta.net/2009/11/16/prima-di-iniziare-guida-sdl-net/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 15:28:45 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[SDL.NET]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[giochi]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=44</guid>
		<description><![CDATA[Bene, la prima parte è andata. Abbiamo creato il nostro “Hello World”. La finestrella nera si è aperta, come prova della corretta impostazione dell&#8217;ambiente di sviluppo. Ovviamente, siamo ancora all&#8217;inizio. Continuiamo quindi quest&#8217;avventura alla scoperta dell&#8217;SDL.NET. In questa seconda parte della guida parleremo degli aspetti più importanti della libreria, legati essenzialmente all&#8217;input (tastiera, mouse e [...]]]></description>
			<content:encoded><![CDATA[<p>Bene, la prima parte è andata. Abbiamo creato il nostro “Hello World”. La finestrella nera si è aperta, come prova della corretta impostazione dell&#8217;ambiente di sviluppo. <strong>Ovviamente, siamo ancora all&#8217;inizio</strong>. Continuiamo quindi quest&#8217;avventura alla scoperta dell&#8217;SDL.NET.</p>
<p>In questa seconda parte della guida parleremo degli <strong>aspetti più importanti</strong> della libreria, <strong>legati essenzialmente all&#8217;input</strong> (tastiera, mouse e joypad) <strong>ed all&#8217;output</strong> (grafica, audio, gestione dei fonts TrueType).</p>
<p>Ma non è tutto: prima di iniziare a lavorare con tutti questi aspetti è importantissimo spiegare cosa sono gli <strong>Eventi</strong>, come funzionano e a cosa servono. Sulla Wiki ufficiale del progetto SDL.NET gli eventi vengono spostati avanti di una lezione rispetto agli elementi grafici: nonostante ciò ho preferito studiare (e quindi riportare su questa guida) prima gli eventi e poi occuparmi di tutti gli altri ambiti. Il motivo è presto spiegato: gli eventi sono il cuore del funzionamento di un programma realizzato con SDL.NET.</p>
<p>Per questo motivo quindi la seconda parte della guida provvederà prima a spiegare gli <strong>Eventi</strong>, poi la gestione dell&#8217;<strong>Output</strong>, poi dell&#8217;<strong>Input</strong>. Infine prenderemo in considerazione un <strong>template</strong> da usare per le proprie applicazioni, ovvero una sorta di codice “standard” pronto da usare per una buona quantità di programmi in SDL.NET.</p>
<p>Bene, proseguiamo!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F11%2F16%2Fprima-di-iniziare-guida-sdl-net%2F&amp;linkname=Prima%20di%20Iniziare%20%26%238211%3B%20Guida%20SDL.NET"><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/11/16/prima-di-iniziare-guida-sdl-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduzione &#8211; Guida SDL.NET</title>
		<link>http://francescomalatesta.net/2009/11/14/introduzione-guida-sdl-net/</link>
		<comments>http://francescomalatesta.net/2009/11/14/introduzione-guida-sdl-net/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 23:01:07 +0000</pubDate>
		<dc:creator>FrancescoMalatesta</dc:creator>
				<category><![CDATA[SDL.NET]]></category>
		<category><![CDATA[c sharp]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[net]]></category>
		<category><![CDATA[programmazione]]></category>
		<category><![CDATA[sdl]]></category>
		<category><![CDATA[videogiochi]]></category>

		<guid isPermaLink="false">http://francescomalatesta.net/?p=25</guid>
		<description><![CDATA[Ciao a tutti! Se vi trovate qui è perchè, in un modo o nell&#8217;altro, siete interessati alla programmazione di videogiochi. Ciò che analizzeremo è una libreria usata proprio per questo scopo: creare videogiochi. Una libreria, nella sua accezione informatica, è un insieme di funzioni di utilità più o meno comune che sono state appositamente create [...]]]></description>
			<content:encoded><![CDATA[<p>Ciao a tutti! Se vi trovate qui è perchè, in un modo o nell&#8217;altro, siete interessati alla <strong>programmazione di videogiochi</strong>. Ciò che analizzeremo è una libreria usata proprio per questo scopo: creare videogiochi.</p>
<p>Una libreria, nella sua accezione informatica, è un insieme di funzioni di utilità più o meno comune che sono state appositamente create per l&#8217;utilizzo in un programma. <strong>L&#8217;obiettivo principale di una libreria è risparmiare tempo</strong>. Una volta un mio professore disse che l&#8217;informatica è l&#8217;arte del riciclaggio. Nulla di più vero.</p>
<p style="text-align: center;"><img class="size-medium wp-image-26" title="computer_programming" src="http://francescomalatesta.net/wp-content/uploads/2009/11/computer_programming-300x225.jpg" alt="computer_programming" width="300" height="225" /></p>
<p>Una libreria serve proprio a questo: <strong>evitare di reinventare ogni volta la ruota</strong> diminuendo il lavoro del programmatore.</p>
<p>Chiarito questo concetto è necessario che io spieghi quello che voglio fare attraverso questa serie di guide ed articoli: il mio principale obiettivo è <strong>capire</strong> al meglio il funzionamento di questa libreria, <strong>tradurre</strong> i vari articoli presenti sul wiki e, così facendo, <strong>fornire un valido aiuto</strong> a tutti i programmatori italiani interessati a questa nicchia che, per un motivo o per un altro, non masticano bene l&#8217;inglese o vogliono vedere comunque un po di materiale nella loro lingua.</p>
<p>Proverò passo passo tutti i passaggi, sintetizzando dove necessario ma anche spiegando linea per linea dove essenziale. Così facendo sarà facile creare un piccolo progetto ed iniziare a buttare giù qualche idea, creando qualcosa di proprio.</p>
<p>Con questo smetto di parlare a vanvera e inizio a fare qualcosa di utile <img src='http://francescomalatesta.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Spero possa esservi d&#8217;aiuto!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Ffrancescomalatesta.net%2F2009%2F11%2F14%2Fintroduzione-guida-sdl-net%2F&amp;linkname=Introduzione%20%26%238211%3B%20Guida%20SDL.NET"><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/11/14/introduzione-guida-sdl-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
