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à!

MonoGame quickstart F#

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.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: