Posts tagged programmazione
Blackberry in Arrivo
feb 5
Salve bella genteeeee! In questi giorni sono stato un pò assente, come d’altronde nell’ultimo periodo. Ma perlomeno so che il blog non sta morendo, così come il sito. Più che altro, c’è un momento per utilizzarlo in un modo e un momento per utilizzarlo nell’altro.
In questi giorni sto facendo qualche lavoretto in php che mi ha permesso di mettere da parte qualche soldo… ed in arrivo ho un bel Blackberry *_* Chi lo sa, magari sarà una buona occasione per mettere mano al Java e parlarne qui su!
Oppure potrei mettere le mani sull’Actionscript 3, che già avevo iniziato a vedere… Alla prossima people!
Installazione dei programmi – Inizio e Preparazione – XNA Tutorials
dic 26
Adesso che abbiamo scaricato i nostri file e il necessario per iniziare, ovviamente, dobbiamo installare un pò tutto. Come prima cosa quindi avvieremo il setup del Visual C# 2008 Express Edition. Una volta avviato dovremo aspettare qualche secondo per il caricamento dei componenti.
Successivamente, ci ritroveremo davanti ad una schermata di installazione classica, nella quale dovremo andare avanti. Incontreremo anche una schermata relativa ai prodotti facoltativi da installare, simile a questa:
(Click per Ingrandire)
Se è la prima volta che lo installate avrete più opzioni tra le quali scegliere: tralasciando il resto delle descrizioni, vi consiglio di installare una copia della documentazione MSDN sul disco fisso, in modo tale da avere sempre un riferimento anche senza una connessione ad internet.
Dopo aver proseguito ci ritroveremo quindi nella schermata di download: potrete vedere con i vostri occhi il programma che creerà una lista di applicazioni da scaricare, le scaricherà una ad una e le installerà sul sistema. Una volta terminate queste operazioni, avremo finito con il Visual C#.
Passiamo quindi all’XNA Game Studio. Apriamo il file “XNAGS31_setup.exe” ed ecco la schermata che ci si porrà davanti:
(Click per Ingrandire)
Da questo momento in poi il discorso sarà lo stesso del Visual C#. L’installazione è automatica e quindi ci basterà cliccare su “Next” quando necessario, scegliendo in un passaggio le modalità di comunicazione dei giochi realizzati con il framework. A voi la scelta di questi parametri.
Una volta finito il processo di installazione avremo tutto il materiale pronto per l’uso. A questo punto non ci rimane che avviare Visual C# 2008 Express Edition e proseguire al prossimo articolo…
Download dei files necessari – Inizio e Preparazione – XNA Tutorials
dic 25
Il titolo dice tutto: come prima cosa dobbiamo prendere tutti i programmi di cui avremo bisogno, installarli e quindi iniziare a lavorare. Il download dei files a noi necessari è veramente semplice e non richiede operazioni complicate. Come prima cosa, andiamo su
http://creators.xna.com/it-IT/downloads
la pagina di download ufficiale di tutti i programmi (e relativi prerequisiti) che utilizzeremo nello sviluppo del nostro gioco. Al momento in cui scrivo, questi sono i downloads messi a disposizione nella pagina:
- XNA Game Studio 3.1 (che utilizzeremo durante i nostri tutorials)
- XNA Game Studio 3.1 Documentation
- Visual C# Express Edition
- DirectX SDK
- DirectX Runtime Web Installer

Cliccando sulla voce di download di XNA Game Studio, verremo indirizzati alla pagina del download vera e propria, su microsoft.com/downloads. La schermata che vi dovreste trovare davanti è questa:
(Click per ingrandire)
basterà cliccare sul pulsante “Download” per iniziare immediatamente il download di questo primo componente. Ma proseguiamo, le cose non finiscono qui.

Le librerie e i file della guida in linea saranno essenziali per lo sviluppo del vostro gioco o programma con XNA Game Studio. Molto spesso infatti sarà necessario andare a cercare informazioni per un metodo, una proprietà oppure una classe messa a disposizione dal Framework. Qui c’è poco da dire e nulla da installare, la documentazione è tranquillamente accessibile da internet.
Una copia della guida, inoltre, sarà installata sul proprio pc in modo tale da essere consultabile anche in assenza di collegamento ad internet.

Visual C# 2008 Express Edition è la versione gratuita dell’ide Microsoft dedicato al C#. Non c’è bisogno che ve ne parli in quanto penso che un minimo lo conosciate già. Ma vediamo come scaricarlo. Quando cliccheremo sul link riportato, verremo redirezionati sulla home page delle versioni Express di Visual Studio. Scorriamo la pagina, nella quale potremo dare un’occhiata ai vari prodotti della suite. Una volta che troverete la voce relativa al Visual C# (come nell’immagine sotto), basterà selezionare l’Italiano come lingua e poi cliccare su Download.

Una volta che avvierete il file scaricato, non vi preoccupate di eseguire altre operazioni, in quanto l’installer si occuperà di installare tutti i prerequisiti necessari. Probabilmente, nel caso non sia presente sulla macchina, verrà installato anche il .NET Framework più recente.
Ora, già con questi componenti installati non dovreste avere molti problemi: in molti casi i runtime directx sono già installati e nel caso non lo siano vi verranno richiesti.
Aggiornamenti – Guida XNA in Arrivo.
dic 23
Buongiorno a tutti bella gente! Dopo un bel pò di inattività su questo blog ho deciso di ritornare sfruttando il tempo libero (ahimè comunque poco) concessomi dalle vacanze di Natale. Come qualcuno avrà letto dai post precedenti, in questi ultimi tempi sono molto meno attivo per via del semplice fatto che sto sviluppando un gioco, nel vero (speriamo) senso della parola.
Questo però non toglie che, data l’utilità e la comodità del Framework XNA, possa scriverci un pò di articoli, per fare in modo che i neofiti riducano al minimo i problemi relativi all’impatto con questa piattaforma. Lo so, il mondo si divide in due parti: quelli che infondo apprezzano XNA e quelli che lo detestano per via di evidenti svantaggi come perdita di fps e così via.
Certo, sarebbe bello imparare subito a smanettare decentemente con l’Ogre3D, validissimo e totalmente gratuito. Ma dato che sono un principiante e non ho modellatori 3D che mi aiutino, penso che iniziare con qualcosa di semplice possa innanzitutto “aprire la mente”, prima ancora dell’insegnare tecnicamente qualcosa.

Di questo “aprire la propria mente” già ne avevo parlato nella mia guida ad SDL.NET. Stavolta, tuttavia, con XNA cercherò di fare le cose in modo molto più approfondito, in modo tale da essere veramente d’aiuto per qualcuno (si spera) oltre che a proporre svariati esempi e minigiochi per fare pratica.
Se avrò tempo, inoltre, sarà piacevole analizzare anche qualche Starter Kit in modo approfondito.
Detto questo vi saluto, lasciandovi qui di seguito degli indirizzi di blog relativi allo sviluppo XNA decisamente utili (e che metterò immediatamente in blogroll).
- XNA Team Blog (http://blogs.msdn.com/xna/)
- Shawn Hargreave (http://blogs.msdn.com/shawnhar/)
- Micheal Klucher (http://klucher.com/)
- Dean Johnson (http://blogs.msdn.com/dejohn/)
Alla prossima
Tempo di indecisioni.
dic 5
Ebbene si.
Sto cercando sempre più di addentrarmi nella programmazione di giochi. Ho voglia di imparare, di studiare e provare magari a fare qualcosa di proprio e proporlo in giro. Le idee ce le ho.
L’unica cosa che non riesco a decidere è COME realizzare tutto questo? Fino ad oggi ho parlato di SDL.NET, ma come librerie, come ben sapranno quelli che del settore ne capiscono, sono abbastanza vecchiotte. Come disse Cherno sul forum di tgmonline, sono state tranquillamente surclassate da Allegro.
Sinceramente, però, volevo rimanere nell’ambito del C#, dato che come linguaggio mi è sembrato interessante. Certo, lo farei con una comprensione decisamente minima di un qualcosa di più potente come il C++. Il grande interrogativo è questo, ma ci sono tanti pro e contro per ogni possibile risposta.
Rimanendo su pc, dovrei trovare una valida libreria/engine con cui lavorare.
Andando su Xbox userei XNA, e fin qui ok. Ma pagare 99$ annuali per fare già solo il debug mi sembra troppo :S
Ci sarebbe la psp… tutto molto nuvoloso.
Mboh.
Creazione di un pacchetto di Installazione per i propri programmi – Parte 1
nov 26
Come avete visto un paio di post addietro, per il mio gioco “A Game About Wife’s Fury” ho realizzato un piccolo pacchetto di installazione, per consentire agli utenti di installarlo con la massima semplicità e scaricando un solo file. Io per primo, al tempo, mi chiesi: Come posso realizzare uno di questi pacchetti di installazione?
Nell’articolo di oggi analizzeremo uno di questi strumenti da me utilizzati. Parliamo di Advanced Installer, reperibile gratuitamente nella sua versione Freeware sul sito http://www.advancedinstaller.com/. Ovviamente, tratterò solo la parte relativa alla versione Freeware, in quanto per ovvie ragioni monetarie non posso ancora permettermi di pagare 299$ ogni sei mesi
Dunque, iniziamo. Colleghiamoci al sito del programma riportato poco sopra, e rechiamoci nella pagina dei Downloads. Clicchiamo sull’icona “Download” e lo scaricamento inizierà automaticamente. Una volta installato il programma (darò per scontato che sappiate farlo
), troveremo una schermata semplice ed intuitiva ad accoglierci all’apertura.
Ovviamente, l’unica tipologia di soluzione che potremo selezionare sarà la “Simple”. Non permetterà delle personalizzazioni a livello estetico, ma sicuramente permetterà di gestire al meglio l’installazione del nostro programma. Tra poco vedremo come.
- Selezioniamo Simple tra le tipologie di progetto;
- Deselezioniamo “Use Wizard to Create the Project”;
- Clicchiamo su Ok.
La schermata che ci ritroveremo sarà la seguente:
Come potete vedere, qui troviamo le prime personalizzazioni base al progetto. Possiamo inserire il nome del programma, il nome del produttore, la versione del programma che installeremo e altri dati sul prodotto come Sito Web, Contatti e Url di Supporto e Update.
A lato, invece, possiamo vedere un menù dove è possibile personalizzare la nostra installazione:

Attualmente ci troviamo in Product Details. Inseriamo le nostre informazioni e, una volta terminata la procedura, passiamo alla scheda successiva: Install Parameters.
In questa nuova schermata avremo a che fare con le personalizzazioni relative ai percorsi d’installazione del nostro programma e i tipi di pacchetti che devono essere installati (da qui potremo selezionare se, per esempio, il nostro programma è destinato ad un’architettura a 64bit o a 32bit). O ancora, possiamo trovare possibilità di personalizzazione riguardanti il reboot dopo l’installazione: dobbiamo riavviare o no il pc alla fine della procedura? Ma non finiamo qui: possiamo decidere se creare o no un punto di ripristino del sistema dopo l’installazione, oppure scegliere delle opzioni di minimizzazione del programma d’installazione stesso.
Insomma, il ventaglio di possibilità che ci viene proposto non è assolutamente indifferente.
Ma andiamo avanti: stavolta saltiamo la scheda Upgrades per passare direttamente a Prerequisites.
Come potete ben intuire, la scelta dei parametri in questa sezione può rivelarsi critica per la creazione di un buon pacchetto di installazione. Ogni programma da noi creato, infatti, avrà dei prerequisiti. Questi prerequisiti sono delle condizioni che devono esistere nella macchina affinchè possa avere successo l’installazione. Per esempio, per il mio gioco “A Game About Wife’s Story”, tra i prerequisiti c’è il .NET Framework 2.0 e un sistema operativo non inferiore a Windows Vista. Questo perchè, in fase di progettazione e sviluppo, ho scelto di usare il .NET Framework nella sua versione 2.0 e ho usato delle macchine con Vista e Windows 7.
Tuttavia la scelta di prerequisiti non si ferma a questi due parametri: possiamo verificare addirittura la presenza di un programma specifico della famiglia Office o di SQL Server Express, giusto per citarne due.
In una scheda al livello inferiore dello schermo inoltre è possibile selezionare delle condizioni minime del sistema per l’avvio: prerequisiti di livello hardware, insomma, come la presenza di una certa quantità di memoria RAM o una risoluzione minima.
Non analizzerò la scheda “Custom Launch Conditions” in quanto in questo articolo parlerò del programma solo a livello basilare. Nella prossima parte dell’articolo invece parlerò dell’altro menù, ovvero quello comprendente “Files & Folder”, “Registry” e “Media”.
Restate sintonizzati, alla prossima!
Template per Applicazioni SDL.NET
nov 23
Rieccomi qua a buttare giù due righe. Stamattina, mentre tornavo a casa, ho pensato di creare un file di template per Visual Studio che permetta, con un singolo click, di creare un modello di applicazione già pronto per l’uso con SDL.NET. Tramite Visual Studio è stato ovviamente molto facile: ve lo riporto qui, pronto da scaricare
Istruzioni per l’installazione del Template:
- Scaricare il file Zip del template.
- Copiarlo (per intero) nella cartella Documenti > Visual Studio xxxx > Templates > ProjectTemplates
- Avviate Visual C# e troverete il vostro nuovo modello di progetto bello e pronto!
xxxx ovviamente è la versione del nostro Visual Studio. Il file che scaricherete l’ho creato con Visual C# Express 2008, per cui potreste avere dei problemi ad aprirlo con altre versioni.
Ciao!
P.S: La struttura base del programma che troverete nel template è quella del file Template.cs, scritta originariamente da Paul Aspinall e commentata da me nella guida che ho scritto
Il Template – Guida SDL.NET
nov 21
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’è confusione nell’approccio iniziale, questo file mette subito in chiaro tutti i metodi tendenzialmente usati e permette di avere il vantaggio di uno “scheletro” base già pronto.
Ho detto base perchè, volendo partire senza troppe pretese da questo file di certo non realizzeremo Assassin’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!
[code]]czozNTEyOlwiDQovL1B1YmxpYyBEb21haW4NCi8vT3JpZ2luYWwgdmVyc2lvbiB3cml0dGVuIGJ5IFBhdWwgQXNwaW5hbGwuDQovL1Z7WyYqJl19ZXJzaW9uZSBjb21tZW50YXRhIGRhIEZyYW5jZXNjbyBNYWxhdGVzdGEgaW4gSXRhbGlhbm8gOikNCg0KLy8gRGlyZXR0aXZlIHVzaXtbJiomXX1uZyBwZXIgbFwnaW5jbHVzaW9uZSBkZWkgbmFtZXNwYWNlIGludGVyZXNzYXRpLg0KdXNpbmcgU3lzdGVtOw0KdXNpbmcgU3lzdGVtLntbJiomXX1EcmF3aW5nOw0KDQp1c2luZyBTZGxEb3ROZXQuQ29yZTsNCnVzaW5nIFNkbERvdE5ldC5HcmFwaGljczsNCnVzaW5nIFNkbERvdE5le1smKiZdfXQuSW5wdXQ7DQoNCm5hbWVzcGFjZSBTZGxEb3ROZXRFeGFtcGxlcy5TbWFsbERlbW9zDQp7DQogICAgcHVibGljIGNsYXNzIFRlbXB7WyYqJl19bGF0ZQ0KICAgIHsNCiAgICAgICAgLyoNCiAgICAgICAgICogUXVlc3RvIG1ldG9kbyBiYXNlIMOoIHN0YXRpY28gZWQgw6ggaWwgcHtbJiomXX11bnRvIGRcJ2luZ3Jlc3NvIG5lbGxhIG5vc3RyYSBhcHBsaWNhemlvbmUuIERhIHF1aSwgaW5mYXR0aSwNCiAgICAgICAgICogZGljaHtbJiomXX1pYXJlcmVtbyB1bmEgbnVvdmEgdmFyaWFiaWxlIGRpIHRpcG8gVGVtcGxhdGUgZWQgZXNlZ3VpcmVtbyBpbCBtZXRvZG8gR28uDQoge1smKiZdfSAgICAgICAgKi8NCiAgICAgICAgW1NUQVRocmVhZF0NCiAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQ0KICAgICAgICB7WyYqJl19ew0KICAgICAgICAgICAgVGVtcGxhdGUgZ2FtZSA9IG5ldyBUZW1wbGF0ZSgpOw0KICAgICAgICAgICAgZ2FtZS5HbygpOw0KICAgIHtbJiomXX0gICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIElsIGNvc3RydXR0b3JlIFRlbXBsYXRlIGF0dHVhbG1lbnRlIMOoIHZ1b3Rve1smKiZdfSBtYSBnZW5lcmFsbWVudGUgw6ggbW9sdG8gdXRpbGUgcGVyIGluaXppYWxpenphcmUgdmFyaWFiaWxpDQogICAgICAgICAqIGNoZSB7WyYqJl19dmVycmFubm8gc3VjY2Vzc2l2YW1lbnRlIHVzYXRlIG5lbCBnaW9jby4NCiAgICAgICAgICovDQogICAgICAgIHB1YmxpYyBUZW1wbHtbJiomXX1hdGUoKQ0KICAgICAgICB7DQogICAgICAgIH0NCiAgICAgICAgLyoNCiAgICAgICAgICogSWwgbWV0b2RvIEdvLCBpbiBxdWVzdG8ge1smKiZdfWNhc28sIGRlZmluaXNjZSBsYSByaXNvbHV6aW9uZSBkZWxsYSBmaW5lc3RyYSBkaSBnaW9jbyAoODAwIHggNjAwKSBlIGF2dmlhIGl7WyYqJl19bCBtZXRvZG8NCiAgICAgICAgICogQWRkSGFuZGxlcnMsIGNoZSBhbmFsaXp6ZXJlbW8gdHJhIHBvY28uIEluIHVsdGltbywgaW5vbHtbJiomXX10cmUsIGxhbmNpYSBpbCBtZXRvZG8gRXZlbnRzLlJ1bigpLCBmYWNlbmRvIHBhcnRpcmUNCiAgICAgICAgICogaW4gcXVlc3RvIG1ve1smKiZdfWRvIGlsIExvb3AgcHJpbmNpcGFsZSBkZWwgZ2lvY28uDQogICAgICAgICAqLw0KICAgICAgICBwdWJsaWMgdm9pZCBHbygpDQogICB7WyYqJl19ICAgICB7DQogICAgICAgICAgICBWaWRlby5TZXRWaWRlb01vZGUoODAwLCA2MDApOw0KICAgICAgICAgICAgdGhpcy5BZGRIYW5kbHtbJiomXX1lcnMoKTsNCiAgICAgICAgICAgIEV2ZW50cy5SdW4oKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIEFkZEhhe1smKiZdfW5kbGVycyDDqCB1biBtZXRvZG8gY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIHNpc3RlbWEgYWQgZXZlbnRpLCBkZWZpbmVuZG97WyYqJl19IGNvbiBmYWNpbGl0w6AgdHV0dGkgcXVlbGxpDQogICAgICAgICAqIGNoZSBkb3ZyYW5ubyBlc3NlcmUgY29udGVtcGxhdGkgZGFsIHtbJiomXX1ub3N0cm8gcHJvZ3JhbW1hLiBJbiBxdWVzdG8gY2FzbyBhYmJpYW1vIGFnZ2l1bnRvIGRlZ2xpIEhhbmRsZXIgcGVyDQogICAgICAge1smKiZdfSAgKiBsXCdldmVudG8gUXVpdCAodXNjaXRhIGRhbCBwcm9ncmFtbWEpIGUgVGljayAoZXZlbnRvIGNoZSBzaSBwcmVzZW50YSBhZCBve1smKiZdfWduaSBmcmFtZSkuDQogICAgICAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgQWRkSGFuZGxlcnMoKQ0KICAgICAgICB7DQogICB7WyYqJl19ICAgICAgICAgRXZlbnRzLlF1aXQgKz0gbmV3IEV2ZW50SGFuZGxlcjxRdWl0RXZlbnRBcmdzPih0aGlzLkV2ZW50c19RdWl0KTsNCntbJiomXX0gICAgICAgICAgICBFdmVudHMuVGljayArPSBuZXcgRXZlbnRIYW5kbGVyPFRpY2tFdmVudEFyZ3M+KHRoaXMuRXZlbnRzX1RpY2spe1smKiZdfTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIFJlbW92ZUhhbmRsZXJzKCkgdG9nbGllIHF1ZWxsbyBjaGUgQWR7WyYqJl19ZEhhbmRsZXJzKCkgYXZldmEgYWdnaXVudG86IHZlbmdvbm8gcmltb3NzaSBnbGkgSGFuZGxlciBhaSB2YXJpIGV2ZW50aQ0KICAgIHtbJiomXX0gICAgICogZSwgY29tZSB2ZWRyZW1vIHN1Y2Nlc3NpdmFtZW50ZSwgcXVlc3RvIG1ldG9kbyB2aWVuZSB1dGlsaXp6YXRvIGluIGZhe1smKiZdfXNlIGRpIHVzY2l0YSBkYWwgZ2lvY28uDQogICAgICAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgUmVtb3ZlSGFuZGxlcnMoKQ17WyYqJl19CiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLlF1aXQgLT0gbmV3IEV2ZW50SGFuZGxlcjxRdWl0RXZlbnRBcmdzPih0aGlzLntbJiomXX1FdmVudHNfUXVpdCk7DQogICAgICAgICAgICBFdmVudHMuVGljayAtPSBuZXcgRXZlbnRIYW5kbGVyPFRpY2tFdmVudEFyZ3M+KHRoe1smKiZdfWlzLkV2ZW50c19UaWNrKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qDQogICAgICAgICAqIEV2ZW50c19UaWNrIMOoIGlsIG1ldG97WyYqJl19ZG8gY29udGVtcGxhdG8gcGVyIGxcJ2V2ZW50byBUaWNrOiBxdWVsbG8gY2hlIGZhIMOoIHNlbXBsaWNlLiBJbml6aWFsbWVudGUgcml7WyYqJl19ZW1waWUNCiAgICAgICAgICogbGEgZmluZXN0cmEgZGkgYmx1ZSwgdHJhbWl0ZSBpbCBtZXRvZG8gRmlsbCBkZWxsYSBTdXJmYWNlIHtbJiomXX1TY3JlZW4uIFN1Y2Nlc3NpdmFtZW50ZSBhZ2dpb3JuYSBpbCB0dXR0byB0cmFtaXRlDQogICAgICAgICAqIGlsIG1ldG9kbyBVcGRhe1smKiZdfXRlKCksIHByb3Z2ZWRlbmRvIGluIHF1ZXN0byBtb2RvIGEgbWFuZGFyZSBzdWxsbyBzY2hlcm1vIGkgcmlzdWx0YXRpIGRlbGxcJ2Vse1smKiZdfWFib3JhemlvbmUuDQogICAgICAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgRXZlbnRzX1RpY2sob2JqZWN0IHNlbmRlciwgVGl7WyYqJl19Y2tFdmVudEFyZ3MgZSkNCiAgICAgICAgew0KICAgICAgICAgICAgVmlkZW8uU2NyZWVuLkZpbGwoU3lzdGVtLkRyYXdpbmcuQ29sb3tbJiomXX1yLkJsdWUpOw0KICAgICAgICAgICAgVmlkZW8uU2NyZWVuLlVwZGF0ZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgLyoNCiAgICAge1smKiZdfSAgICAqIENvbWUgZ2nDoCBkZXR0byBwcmVjZWRlbnRlbWVudGUsIEV2ZW50c19RdWl0IHByb3Z2ZWRlIGEgcmltdW92ZXJlIGkgdmF7WyYqJl19cmkgRXZlbnRIYW5kbGVycyB0cmFtaXRlIGlsIG1ldG9kbw0KICAgICAgICAgKiBSZW1vdmVIYW5kbGVycygpIGUgc3VjY2Vzc2l2YXtbJiomXX1tZW50ZSBlc2NlIGRhbCBwcm9ncmFtbWEsIHRyYW1pdGUgaWwgbWV0b2RvIEV2ZW50cy5RdWl0QXBwbGljYXRpb24oKS4NCiAgICAge1smKiZdfSAgICAqLw0KICAgICAgICBwcml2YXRlIHZvaWQgRXZlbnRzX1F1aXQob2JqZWN0IHNlbmRlciwgUXVpdEV2ZW50QXJncyBlKQ0KICB7WyYqJl19ICAgICAgew0KICAgICAgICAgICAgUmVtb3ZlSGFuZGxlcnMoKTsNCiAgICAgICAgICAgIEV2ZW50cy5RdWl0QXBwbGljYXRpb24oKXtbJiomXX07DQogICAgICAgIH0NCiAgICB9DQp9DQpcIjt7WyYqJl19[[/code]
Scarica il file Template.cs
Input – Mouse e Tastiera – Guida SDL.NET
nov 21
Ora cambiamo un po argomento. Abbiamo visto tutto (o quasi) ciò che poteva riguardare l’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 è 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’utente interagisce con il nostro gioco. Vi ricordate il sistema degli eventi, che avevo descritto ed introdotto qualche tempo fa? Inizieremo proprio da lì.
Riprendiamo l’esempio dell’Hello World, apportando però qualche modifica al codice:
[code]]czo3OTg6XCINCnVzaW5nIFN5c3RlbTsNCg0KdXNpbmcgU2RsRG90TmV0LkNvcmU7DQp1c2luZyBTZGxEb3ROZXQuR3JhcGhpY3M7DQp7WyYqJl19DQpuYW1lc3BhY2UgU2RsRG90TmV0RXhhbXBsZXMuU21hbGxEZW1vcw0Kew0KICAgIHB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkDQogIHtbJiomXX0gIHsNCiAgICAgICAgW1NUQVRocmVhZF0NCiAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQ0KICAgICAgICB7DQogICAge1smKiZdfSAgICAgICAgSGVsbG9Xb3JsZCBhcHAgPSBuZXcgSGVsbG9Xb3JsZCgpOw0KICAgICAgICAgICAgYXBwLkdvKCk7DQogICAgICAgIH17WyYqJl19DQoNCiAgICAgICAgcHVibGljIEhlbGxvV29ybGQoKQ0KICAgICAgICB7DQogICAgICAgICAgICBWaWRlby5TZXRWaWRlb01vZGUoNHtbJiomXX0wMCwgMzAwKTsNCiAgICAgICAgICAgIFZpZGVvLldpbmRvd0NhcHRpb24gPSBcIkhlbGxvIFdvcmxkIVwiOw0KICAgICAgICB9DQoNCiB7WyYqJl19ICAgICAgIHB1YmxpYyB2b2lkIEdvKCkNCiAgICAgICAgew0KICAgICAgICAgICAgRXZlbnRzLktleWJvYXJkRG93biArPSBuZXcgRXtbJiomXX12ZW50SGFuZGxlcihFdmVudHNfS2V5Ym9hcmREb3duKTsNCiAgICAgICAgICAgIEV2ZW50cy5SdW4oKTsNCiAgICAgICAgfQ0KDQoge1smKiZdfSAgICAgICB2b2lkIEV2ZW50c19LZXlib2FyZERvd24ob2JqZWN0IHNlbmRlciwgU2RsRG90TmV0LklucHV0LktleWJvYXJkRXZlbnR7WyYqJl19QXJncyBlKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZiAoZS5LZXkgPT0gU2RsRG90TmV0LklucHV0LktleS5Fc2NhcGUpIEV2ZXtbJiomXX1udHMuUXVpdEFwcGxpY2F0aW9uKCk7DQogICAgICAgIH0NCiAgICB9DQp9DQpcIjt7WyYqJl19[[/code]
Dunque, cosa abbiamo di diverso? Sicuramente l'istruzione
Events.KeyboardDown += new EventHandler<SdlDotNet.Input.KeyboardEventArgs>(Events_KeyboardDown);
E... cosa vorrebbe dire?
Semplicemente, che abbiamo gestito l'evento che si verificherà alla pressione di un tasto sulla nostra tastiera.
Ehm... cioè?
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:
void Events_KeyboardDown(object sender, SdlDotNet.Input.KeyboardEventArgs e)
{
if (e.Key == SdlDotNet.Input.Key.Escape) Events.QuitApplication();
}
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:
if (e.Key == SdlDotNet.Input.Key.Escape) Events.QuitApplication();
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.
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).
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.
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.
[code]]czoxNjg0OlwiDQp1c2luZyBTeXN0ZW07DQoNCnVzaW5nIFNkbERvdE5ldC5Db3JlOw0KdXNpbmcgU2RsRG90TmV0LkdyYXBoaWNzOw17WyYqJl19Cg0KbmFtZXNwYWNlIFNkbERvdE5ldEV4YW1wbGVzLlNtYWxsRGVtb3MNCnsNCnB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkDQp7DQpGb3tbJiomXX1udCBmMSA9IG5ldyBGb250KFwiQ2FsaWJyaS50dGZcIiwgMTIpOw0KDQp1c2luZyBTeXN0ZW07DQoNCnVzaW5nIFNkbERvdE5ldC5Db3J7WyYqJl19ZTsNCnVzaW5nIFNkbERvdE5ldC5HcmFwaGljczsNCg0KbmFtZXNwYWNlIFNkbERvdE5ldEV4YW1wbGVzLlNtYWxsRGVtb3MNCnsNCntbJiomXX0gICAgcHVibGljIGNsYXNzIEhlbGxvV29ybGQNCiAgICB7DQogICAgICAgIEZvbnQgZjEgPSBuZXcgRm9udChcIkNhbGlicmkudHRmXCJ7WyYqJl19LCAxMik7DQoNCiAgICAgICAgc3RyaW5nIHBvc2l6aW9uZSA9IFwiXCI7DQoNCiAgICAgICAgW1NUQVRocmVhZF0NCiAgICAgICAgcHVie1smKiZdfWxpYyBzdGF0aWMgdm9pZCBNYWluKCkNCiAgICAgICAgew0KICAgICAgICAgICAgSGVsbG9Xb3JsZCBhcHAgPSBuZXcgSGVsbG9Xb3J7WyYqJl19bGQoKTsNCiAgICAgICAgICAgIGFwcC5HbygpOw0KICAgICAgICB9DQoNCiAgICAgICAgcHVibGljIEhlbGxvV29ybGQoKQ0KICAgIHtbJiomXX0gICAgew0KICAgICAgICAgICAgVmlkZW8uU2V0VmlkZW9Nb2RlKDQwMCwgMzAwKTsNCiAgICAgICAgICAgIFZpZGVvLldpbmRvd0Nhe1smKiZdfXB0aW9uID0gXCJIZWxsbyBXb3JsZCFcIjsNCiAgICAgICAgfQ0KICAgICAgICBwdWJsaWMgdm9pZCBHbygpDQogICAgICAgIHsNCiAgIHtbJiomXX0gICAgICAgICBFdmVudHMuS2V5Ym9hcmREb3duICs9IG5ldyBFdmVudEhhbmRsZXIoRXZlbnRzX0tleWJvYXJkRG93bik7DQogICAge1smKiZdfSAgICAgICAgRXZlbnRzLk1vdXNlTW90aW9uICs9IG5ldyBFdmVudEhhbmRsZXIoRXZlbnRzX01vdXNlTW90aW9uKTsNCiAgICAgICB7WyYqJl19ICAgICBFdmVudHMuVGljayArPSBuZXcgRXZlbnRIYW5kbGVyKEV2ZW50c19UaWNrKTsNCiAgICAgICAgICAgIEV2ZW50cy5SdW4oKXtbJiomXX07DQogICAgICAgIH0NCg0KICAgICAgICB2b2lkIEV2ZW50c19UaWNrKG9iamVjdCBzZW5kZXIsIFRpY2tFdmVudEFyZ3MgZSkNCiAge1smKiZdfSAgICAgIHsNCiAgICAgICAgICAgIFZpZGVvLlNjcmVlbi5GaWxsKFN5c3RlbS5EcmF3aW5nLkNvbG9yLkJsYWNrKTsNCiAgICAgICB7WyYqJl19ICAgICBWaWRlby5TY3JlZW4uQmxpdChmMS5SZW5kZXIocG9zaXppb25lLCBTeXN0ZW0uRHJhd2luZy5Db2xvci5XaGl0ZSksIG5ld3tbJiomXX0gU3lzdGVtLkRyYXdpbmcuUG9pbnQoMjAsIDIwKSk7DQogICAgICAgICAgICBWaWRlby5TY3JlZW4uVXBkYXRlKCk7DQogICAgICAge1smKiZdfSB9DQoNCiAgICAgICAgdm9pZCBFdmVudHNfTW91c2VNb3Rpb24ob2JqZWN0IHNlbmRlciwgU2RsRG90TmV0LklucHV0Lk1vdXNlTW97WyYqJl19dGlvbkV2ZW50QXJncyBlKQ0KICAgICAgICB7DQogICAgICAgICAgICBwb3NpemlvbmUgPSBcIk1vdXNlIC0gWDogXCIgKyBlLlkuVG9Te1smKiZdfXRyaW5nKCkgKyBcIiwgWTogXCIgKyBlLlguVG9TdHJpbmcoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHZvaWQgRXZlbnRzX0tleWJvYXtbJiomXX1yZERvd24ob2JqZWN0IHNlbmRlciwgU2RsRG90TmV0LklucHV0LktleWJvYXJkRXZlbnRBcmdzIGUpDQogICAgICAgIHsNCiAgICAge1smKiZdfSAgICAgICBpZiAoZS5LZXkgPT0gU2RsRG90TmV0LklucHV0LktleS5Fc2NhcGUpIEV2ZW50cy5RdWl0QXBwbGljYXRpb24oKTsNCiB7WyYqJl19ICAgICAgIH0NCiAgICB9DQp9DQpcIjt7WyYqJl19[[/code]
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.
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):
Font f1 = new Font("Calibri.ttf", 12);
string posizione = "";
Adesso andiamo a gestire l'evento relativo al movimento del mouse, che si chiama MouseMotion:
public void Go()
{
Events.KeyboardDown += new EventHandler<SdlDotNet.Input.KeyboardEventArgs>(Events_KeyboardDown);
Events.MouseMotion += new EventHandler<SdlDotNet.Input.MouseMotionEventArgs>(Events_MouseMotion);
Events.Tick += new EventHandler<TickEventArgs>(Events_Tick);
Events.Run();
}
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:
void Events_MouseMotion(object sender, SdlDotNet.Input.MouseMotionEventArgs e)
{
posizione = "Mouse - X: " + e.X.ToString() + ", Y: " + e.Y.ToString();
}
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.

Una schermata del programma di Prova.
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:
- X ed Y: due proprietà che indicano la posizione sull'asse X ed Y del mouse allo stato attuale del sistema;
- Button: restituisce il nome del pulsante del mouse attualmente premuto usando come valori possibili l'enumerazione Input.MouseButton;
- ButtonPressed: booleana che restituisce True nel caso un pulsante sia stato premuto.
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.
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.
Alla prossima!
Output – Audio – Guida SDL.NET
nov 19
Nell’ambito della gestione dell’audio ci sono svariate classi interessanti: in questa parte della guida prenderò in considerazione quelle che reputo le due “base” per il settore. Parlo delle classi Sound e Music. L’SDL.NET supporta svariati formati di files Audio: Microsoft Wave, Ogg Vorbis, MIDI. Attualmente, tuttavia, gli mp3 non sono supportati, per cui se dovete usare dei files di questo formato dovrete guardare altrove (anche di questo parleremo più avanti).
Come già avvenuto per le Surface e per i Fonts, il caricamento in memoria di un file audio è veramente semplice:
Sound bang = new Sound(“bang.wav”);
In questo modo all’oggetto bang sarà associato il suono “bang.wav” residente in memoria. Anche la riproduzione del suono è enormemente agevolata grazie al metodo Play(). Ecco due esempi per comprendere quanto è facile:
- bang.Play(); // Il suono viene riprodotto una volta.
- bang.Play(4); // Il suono viene riprodotto quattro volte.
Essendo questa una classe base, ovviamente, non ci sarà la possibilità di agire molto sulla personalizzazione del suono e la sua modifica. Tra gli altri metodi interessanti che possiamo trovare, tuttavia, abbiamo:
- Il metodo FadeIn che permette di riprodurre il suono in fade in. Gli passiamo come parametro un intero che indichi il tempo di fade in millisecondi.
- Il metodo FadeOut, analogamente alla precedente, permette di stoppare il suono in fade out. Anche in questo caso gli passiamo il numero di millisecondi sottoforma di un intero.
- Il metodo Stop, ovviamente, non può mancare. Non ha bisogno di presentazioni
Tra le proprietà degne di nota, invece, riporto solamente la proprietà “Volume”, che permette di regolare il volume.
Per la musica c’è un’altra classe a parte, come detto precedentemente: Music. Funziona nello stesso identico modo di Sound per quanto riguarda il caricamento dei suoni. La proprietà Volume, però, stavolta non è disponibile.
L’ho già detto precedentemente e mi ripeto: come potete vedere le classi che ho trattato in questa piccola parte della guida sono molto semplici e non sono molto potenti. Permettono di fare operazioni base ma niente di eccezionale. Tuttavia, una volta che si prenderà dimestichezza con entità quali la classe Mixer e la classe MusicPlayer (di cui parlerò in un contesto più avanzato) le cose cambieranno radicalmente.
Date un occhiata all’esempio di riferimento, in modo tale da capire meglio un pò il funzionamento e fare qualche prova. Per ora è tutto: iniziamo a parlare un pò di input
Alla prossima!











Ultimi Commenti