kunskapsdokument - spaceshooter

Kunskapsdokument - spaceshooter

Nya versioner gör att saker ändras

Det förändras hela tiden hur saker fungerar i olika versioner.

Här kommer det att byggas upp ett hjälpdokument för att kunna genomföra den tutorial som används i boken. Kör du fast i bokens tutorial så vill jag att du kikar här om det finns hjälp att få.

Detta dokument kommer byggas ut under kursens gång, om du hittar något som inte fungerar som det skall enligt boken så skicka ett meddelande till mig så för jag upp det i detta dokumentet.

6.5 Lägg till en sprite (s. 40)

Strax före kapitel 6.5.1 så hänvisar författaren till Appendix 1 eller 2 för att lägga till en Sprite till ditt projekt. Ingen av dessa alternativ kommer att fungera. Istället skall du göra på följande sätt:

  1. Ladda ner alla sprites som behövs i detta projekt.
  2. Gå ner i mappen projektetsNamn/projektetsNamn/Content/ och kopiera filen ship.png till denna mapp. Du kan ju passa på att lägga alla andra spritefiler där också, de skall användas i spelet senare.
  3. Öppna sedan Content.mgcb, detta gör du inne i Visual Studio 2022 genom att dubbelklicka på filen.
  4. I rutan för Project så högerklickar du på Content, väljer Add > Existing Item...
  5. Markera ship.png och klicka på Öppna.
  6. Klicka på knappen, eller menyalternativet, för Build. Om filen/filerna nu får en röd ikon och inte verkar byggas korrekt så kika på lösningen nedan.
  7. Välj sedan att spara File > Save.
  8. Stäng sedan ContentManager.

I Exempel 6.14 så har författaren angivit images/player/ship som länk till skeppets bild. Nu när vi har lagt in bilden i Content så behöver vi ange den adressen som gäller där. Har du inte skapat någon mapp så är adressen ship, har du skapat mapp så blir adressen mappensNamn/ship osv.

Fortsätt nu att skriva koden för kapitel 6.5.1 - 6.5.2.

Problem vid kompilering (eller bygge av bilder)

Om det inte fungerar när du kompilerar och kör programmet så kan du få följande felkod: Importer 'TextureImporter' had unexpected failure! så är det en konflikt mellan 32- och 64-bitars windowsinstallation.

Lösningen för mig var att installera Microsoft Visual C++ 2013 Redistributable Package genom att ladda ner filerna vcredist_x64.exe och vcredist_x86.exe från denna länk och sedan installera bägge filerna. [länk till film som visar det jag precis har skrivit.]

6.5.4 Animation via Update() (s. 45)

Om du inte ser skeppet första gången, så kör om programmet och kika i det nedre högra hörnet så kanske du ser skeppet dra iväg. Om du vill se att det fungerar som det skall så kan du sätta ner hastigheten lite på skeppet och det gör du genom att temporärt ändra koderna från...

Kod från boken

ship_vector.X += ship_vector.X;
ship_vector.Y += ship_vector.Y;

...till..

Kod för att hinna se skeppets rörelse

ship_vector.X += 0.5f;   //ship_vector.X;
ship_vector.Y += 0.5f;   //ship_vector.Y;

... och denna hastigheten kan du laborera med som du vill, ganska snart skall detta kopplas till tangenter istället så att användaren kan styra skeppet.

6.6 Läsa av tangenttryckningar (s. 47)

Här gäller det att kommentera bort den delen som handlar om hur rymdskeppet automatisk flyttar sig annars kommer du få ett problem där du både styr och får hjälp/stjälp av den automatiska rörelsen. Att du behöver ta bort den koden är inte tydligt i boken.

7.4.4 Skriva ut text i MonoGame (s. 68)

Att skriva ut text på skärmen brukar skapa en hel del problem. Boken beskriver ett sätt som inte längre är användbart. Kika på filmen för att få det att fungerar.

Tips1: Skapa ett nytt testprojekt för att leka med texten första gången.
Tips2: I filmen använder han en font som heter Ubuntu, välj Arial istället om du inte har Ubuntu installerat på din dator.

Problem vid bygge av spriteFont

Om det inte fungerar att bygga en spriteFont i Pipeline så krävs en liknande lösning som du eventuellt gjorde när du skulle bygga Sprites.

Följ denna länk och installera filen vcredist_x64.exe.

Problem med svenska bokstäver

Troligtvis kommer du märka att det inte går att skriva ut svenska bokstäver när du har skapat din font och att du får följande felmeddelande.

Failure

Text contains characters that cannot be resolved by this SpriteFont.

Det beror på att det i själva fontdokumentet finns information om i vilket intervall som fonten godkänner tecken i ASCII-tabellen. Fonten är exentligen ett XML-dokument som du kan öppna i valfri texteditor för att redigera.

Längst ner i XML-filen så finns informationen som du behöver. I elementet finns ett start och ett slutvärde. Just nu är de inställda på intervallet 32-126 i ASCII-tabellen. Dessa tecken kallas för ASCII printable characters och är fullt tillräckligt för de flesta engelskspråkiga utvecklare. För alla oss andra så kommer det inte att räcka utan vi behöver komma åt Extended ASCII characters. De svenska tecken som vi är intresseade av har ASCII-värden 196 (Ä), 197 (Å), 214 (Ö), 228 (ä), 229 (å) och 246 (ö). För att göra detta så finns det två sätt att göra det på.

1. Vi kan välja att utvidga vilka tecken i ASCII-tabellen som vi skall tillåta. Lilla ö är det sista tecken vi behöver komma åt och då behöver vi utvidga till tecken nr 246.

2. Det andra alternativet är att lägga till en ny region där vi ringar in alla de svenska tecken från 196 till 246.

Vilken man använder är en smaksak.

7.4.7 Ta bort fiender (s. 77)

När du skriver raden foreach (Enemy e in enemies.ToList() ) får du ett error, det löser du på följande sätt; Högerklicka på ToList och sedan Resolve -­‐> using System.Linq.
Då kommer using System.Linq; läggas till bland deklarationerna längst upp i filen.

Kodhjälp kapitel 7

Eftersom det i boken inte finns någon samlad kod efter kapitel 7 så har jag lagt dessa här. Notera att det är den kod som jag har skrivit när jag själv har följt tutorial, vilket innebär att den är vädigt lik, men kanske inte identisk hela vägen.

Kodhjälp [klicka för att visa]

Enemy.cs [klicka för att visa]

Game1.cs [klicka för att visa]

GameObject.cs [klicka för att visa]

PhysicalObject.cs [klicka för att visa]

Player.cs [klicka för att visa]

PowerUp.cs [klicka för att visa]

PrintText.cs [klicka för att visa]

PrintText.cs [klicka för att visa]

Denna kanske inte fungerar eftersom vi har gjort om sättet som text skrivs ut, se 7.4.4

Kodhjälp kapitel 8

Eftersom det i boken inte finns någon samlad kod efter kapitel 8 så har jag lagt dessa här. Notera att det är den kod som jag har skrivit när jag själv har följt tutorial, vilket innebär att den är vädigt lik, men kanske inte identisk hela vägen.

Kodhjälp [klicka för att visa]

BackgroundSprite.cs [klicka för att visa]

Enemy.cs [klicka för att visa]

Game1.cs [klicka för att visa]

GameElements.cs [klicka för att visa]

GameObjects.cs [klicka för att visa]

Menu.cs [klicka för att visa]

PhysicalObject.cs [klicka för att visa]

Player.cs [klicka för att visa]

PowerUp.cs [klicka för att visa]

PrintText.cs [klicka för att visa]

PrintText.cs [klicka för att visa]

Denna kanske inte fungerar eftersom vi har gjort om sättet som text skrivs ut, se 7.4.4

HighScore

Egentligen tror jag inte att det behövs någon större hjälp här men en påminnelse till att du skapar en font och skriver ut en text enligt information på denna sidan och inte på det sätt som författaren gör det i boken.

Författaren pratar också om att txt-filen som skapas läggs i samma mapp som exe-filen lagras. För att hitta denna sökväg så gå till mappen för projektet och så hittar du både filerna i mappen bin\Windows\x86\Debug.