Inledning
MonoGame är ett relativt enkelt ramverk för att du ska kunna skapa spel på olika plattformar. Idén bygger på en plattform kallad XNA som vi tidigare har använt i många artiklar på csharpskolan. XNA är sedan lång tid tillbaka nedlagt och stöd saknas på nya plattformar.
Ramverket XNA är nära nog identiskt återskapat i MonoGame. Du kan slippa skriva om kod utan bara behöva kompilera om gamla XNA-projekt. MonoGame laddas snabbt ned och installeras. Det fungerar bra med Visual Studio och du får en mängd projekt att välja på.
Du får ett brett stöd för flera plattformar t.ex. Windows, Windows Phone 8, iOS, Android, Mac OS X, Linux, OUYA samt Windows 10 (Universal App).
MonoGame använder i botten främst två olika ramverk: DirectX via projektet SharpDx samt OpenGL. För Windows finns det två projekttyper att välja mellan, den ena använder DirectX och den andra OpenGL.
Installation
Inga konstigheter direkt.
Uppdatering till MonoGame 3.5. Nya features och buggfixar. Vi kikar också närmre på den intressanta "Windows 10 Universal Project"-mallen i MonoGame. Enkelt utveckling till alla Windows 10 plattformar på en och samma gång! Det innefattar Xbox, Surface, PC etc.
Ett första projekt
Vi laddar en bild som sedan ritas ut på skärmen.
För att ladda Content krävs speciell hantering. MonoGame har numera en egen hantering av Content. Tyvärr är själva Content-filen i MonoGame-projektet fel associerad. Vi rättar till detta i videon nedan så att rätt program startas.
Inmatning via tangentbordet
Hur styr vi med knappar på tangentbordet? En kort genomgång.
Musik & ljudeffekter
Vi börjar med att spela lite bakgrundsmusik. Därefter börjar vi titta lite på ljudeffekter i MonoGame. MonoGame stöder även systemet från XNA som heter XACT, dvs. det går att återanvända XNA-projekt på ett bra sätt.
NOTIS: Vi hade problem med uppspelning av ljudeffekter i sista videon. Det kan bero på en rad olika faktorer, t.ex. att vi använder Windows 10 på en laptop, men med tanke på att det fungerar i gamla XNA så är det troligtvis en bugg i MonoGame 3.4.
OpenGL vs DirectX
För Windows desktop har vi möjlighet att välja mellan OpenGL eller DirectX. Väljer vi OpenGL, via projekttypen "MonoGame Windows OpenGL Project" så används en annand "backend" både för grafik (OpenGL) och ljud (OpenAL). Förutom att OpenGL är gångbart på t.ex. Linux och Mac så skiljer det sig något i stödet av ljud. Vi diskuterar ljudeffekter och en del avvikelser.
Gamepad
Allt blir roligare med en gamepad som kontroll! Vi går igenom enkelt hantering av joystick och knappar på en GamePad. Om du inte redan har tillgång till en gamepad så rekommenderar vi en Xbox360 gamepad som passar Windows. Då får du en bra känsla samt kan använda kontrollen till ditt riktiga Xbox360 om du har ett.
Problem du kan stöta på
MonoGame Pipeline
MonoGame Pipeline lider just nu av en irriterande bugg som tas upp i videon. Dels så associeras inte Content-filtypen i Visual Studio korrekt. Men mer allvarligt är att programmet inte tar emot någon inparameter med filnamn. Dvs. programmet ignorerar inparametern och öppnar alltid den senaste Content-filen. Du måste alltså manuellt stänga filen från ett tidigare projekt och söka upp dina nya Content-fil varje gång du startar ett nytt projekt!
Ljudproblem
Som vi märkt på några maskiner så fungerar inte klassen SoundEffect i "MonoGame Windows Project" alla gånger. En lösning då kan vara att gå över till OpenAL via OpenGL. Dessvärre minskar då stödet för t.ex. mp3 i klassen Song.
Lösning: För oss fungerade att installera om DirectX vis samma länk som i tipset för saknad dll nedan. Trots att vi inte led av problemet "saknad dll" så fungerade detta alltså!
OpenAL
Vi råkade även ut för att installationen av OpenAL inte tog som den skulle. Det man möts av då är ett exception av typen NoAudioHardwareFoundException så fort man försöker spela en ljudeffekt.
Lösningen är att manuellt ladda hem och installera OpenAL.
Saknad dll (Xinput)
Vid en ren installation av MonoGame och Windows så är det högst troligt att det saknas en dll för input (Xinput). Denna dll är en del av DirectX som inte längre skickas med Windows per default. MonoGame installerar inte heller denna dll.
Spelet kommer som standard att krascha så fort du kör det med ett DllNotFoundException på rader som använder GamePad. Den dll som saknas hanterar input från just gamepads.
Lösningen är att manuellt installera DirectX. Följ denna länk.
Många som t.ex. har installerat XNA redan, eller som har installerat några spel som använder DirectX, får troligtvis inte detta bekymmer.