Vecka tre: Enemy Death
|
Denna vecka har jag arbetat på att göra Enemy Death, det vill säga döda spelarens motståndare. Detta har gjorts på grund av att alla fiender ska dö om spelaren träffar dem med sina projektiler. Jag började först med att fundera ut den bästa lösningen till att göra detta. Jag var tvungen att tänka hur jag skulle göra uppgiften, vad som ska hända efter att spelarens projektiler och fiender kolliderar med varandra samt titta på hur vi har byggt upp vårt system till dagsläget och leta efter ändringar som skulle behövas göra. Vad jag hittade som problem var att vi hade lagt alla entiteter till vårt spel i en och samma lista, till och med spelaren. Detta var väldigt opraktiskt då vårat spel ska ha ”bullet hell” i sig, vilket är att skärmen kommer att bli fylld av fienders projektiler. Om allt skulle vara i en och samma lista så skulle programmet loopas igenom ett antal onödiga gånger. Ett bra exempel på detta är att i en boss fight så skjuter bossen ut ca 50 skott, medan spelaren skjuter nio skott. I våran förra lösning så skulle vi ha en lista som innehöll spelaren, spelarens skott, bossen samt bossens skott. Denna lista skulle kunna innehålla 61 entiteter, var av varje entitet skulle behövas checkas med vilken enhet de är samt om de kolliderar med något. Denna lösning skulle kräva ca 3 600 loopningar, medan våran nuvarande lösning kräver endast 60 loopningar och kräver inte heller att det måste checkas med vilken enhet dem är. Så nu ligger alla entiteter i listor som innehåller en vissa typ av entiteter i sig, t.ex. spelarens projektiler är i en lista medan projektiler ifrån alla motståndare samt bossar ligger i en annan. Jag har försökt att lösa denna uppgift genom att i funktionen ”Update” i klassen ”Entity Manager” lägga till en kollisions check i loopen som uppdaterar fiender. Kollisions checken jämför fiendens ”hitbox” med spelarens projektilers ”hitbox”. Om detta är sant så förstörs både fienden och projektilen, p.g.a. att projektilen ska inte fortsätta och träffa andra fiender och alla fiender tål bara ett skott. Efter att de båda objekten har förstörts så skapas ett ”Enemy Death” objekt som är till för att endast visa fienders dödsanimation. Allt detta kommer att återanvändas till t.ex. att spelaren blir träffad, tar upp en power up, mm. Jag har dock inte ännu fått något resultat ifrån min lösning på grund av att kollisions checken inte returnerar rätt svar. Vi kan bara anta att detta fungerar tills att kollisions checken har blivit fixad. På grund av att jag inte kan ta screen shots på vad som händer vid träff så har jag skapat bilden nedan för att ge en illustration på vad som ska hända.
|
