MonoEye på GitHub
MonoEye är en implementation av spelet ”Eye of the Beholder” i C# MonoGame. Främsta anledning till projektet är att jag alltid älskat spelet och gillar att sätta mig in i hur det är uppbyggt.
Några artiklar finns redan här på csharpskolan men jag tänkte att det kan vara intressant för vissa att lägga upp projektet i sin helhet på GitHub. Du hittar repot här.
Samtidigt passade jag på att uppgradera kodbasen till MonoGame 3.8. Läs mer om mina bekymmer i inlägget.
Jag strukturerade om koden till ett MonoEye.Game och ett MonoEye.Common. Speldelen fick bli ett ”Desktop OpenGl” projekt och MonoEye.Common ett .NET Standard. Jag upptäckte också att MonoGame 3.8 vill helst ha .NET Core 3.1, speciellt om man ska använda och installera Content Editorn. Som tur är får man bra info om att Runtime för .NET Core 3.1 saknas samt bra länkar.
Bugg #1 – Skärmstorlek
Tydligen är det en bugg i 3.8 som göra att man inte kan ställa PreferredBackBufferWidth o Height i konstruktorn utan den måste sättas i Initialize() tillsammans med en graphics.ApplyChanges().
Lite irriterande men enkelt fixat.
Bugg #2 – Pixelfel
Det syns kanske inte så mycket men det var block och pixlar som helt plötsligt blev helt knas. Efter lite felsökning så visade det sig att Texture2D.GetData tillsammans med Texture2D.SetData inte var så lyckat längre. Jag rita lite slarvigt ett 8×8 pixel-block i taget till varje texture. Tydligen fanns det buggar för t.ex. Android där GetData korrumperade data vid anrop. Eftersom jag upprepade gånger anropade GetData och SetData för varje texture så misstänkte jag att felet låg där.
Efter att ha skrivit om rutinen för att rita upp texturerna till att bara skriva med SetData när allt var klart så försvann buggen. Koden blev såklart bättre men felet skulle ändå inte dyka upp kan man tycka.
Efteråt så såg det ut som vanligt.