MonoGame con F# su Linux
In quest’articolo vi illustro brevemente come utilizzare F# su Linux per realizzare videogames multipiattaforma tramite la libreria MonoGame (Un clone opensource di Microsoft XNA).
Perchè scriverci un articolo? Fondamentalmente perchè non tutto funziona al volo come i team di Xamarin e MonoGame vogliono farti credere; o almeno, non a me, non su gentoo linux e monodevelop4.
1. Download
Per prima cosa dobbiamo scaricare MonoGame; andate sulla sezione download di MonoGame e scaricate la versione per Xamarin studio (monodevelop4). Il file scaricato è un pacchetto mpack, installabile tramite l’AddIn Manager di monodevelop; il problema è il numero cospicuo di errori a runtime utilizzando il framework (provatelo comunque, magari avete più fortuna di me).
2. Installazione librerie
Se non avete avuto fortuna con il pacchetto, allora scompattatelo (è un semplice file zip), e spostate le librerie presenti in assemblies/Linux in una posizione a voi favorevole.
3. Creazione del progetto
Create ora un nuovo progetto F# Console: nelle References del progetto aggiungete le librerie Lidgren, MonoGame, OpenTK e TAO che avete estratto in precedenza. Create inoltre una cartella Content nella root directory del progetto (vi servirà per l’inserimento dei contenuti).
4. Sorgente
Inseriamo un pò di codice di Test nel progetto; per prima cosa una classe Game1 che implementa Microsoft.Xna.Framework.Game. L’esempio in questione si occupa semplicemente di presentare una finestra, il cui interno viene dipinto del colore Color.CornflowerBlue.
open System
open Microsoft.Xna.Framework
open Microsoft.Xna.Framework.Graphics
open Microsoft.Xna.Framework.Storage
open Microsoft.Xna.Framework.Input
type Game1() as this =
inherit Game ()
do
this.Content.RootDirectory <- "Content"
member val graphics : GraphicsDeviceManager = new GraphicsDeviceManager (this) with get, set
member val spriteBatch : SpriteBatch = null with get, set
override this.Initialize () =
base.Initialize ()
override this.LoadContent () =
this.spriteBatch
override this.Update (gameTime) =
base.Update (gameTime)
override this.Draw (gameTime) =
this.graphics.GraphicsDevice.Clear (Color.CornflowerBlue)
base.Draw (gameTime)
Infine modifichiamo Program.fs in questo modo:
open System
let main args =
let ob = new Game1()
do
ob.Run ()
0
Provate a compilare ed eseguire, et voilà!
Funziona, ma probabilmente vi starete chiedendo “Ma senza un plugin dell’IDE come faccio ad inserire i contenuti sonori e grafici nel progetto e convertirli in automatico in .xnb?” Potete utilizzare XNA4 Content Compiler.