Enemies och EnemyManager

SuburbiaEnemyDrawTest1

 

Jag har skapat en fiende klass och en manager för den klassen. Fiendeklassen laddar in och skapar texturer som den sedan omvandlar till sprites samt får den in koordinater i form av radianer (som agerar som x-position) och radius (som agerar som y-position) som då bestämmer dess position i relation till cirklen och ett offset för rörelsen. I fiendeklassens update funktion ändras värdet på varje fienders relative radie från cirkeln varje frame som då gör att de åker neråt. Samtidigt ändras också dess relativa graders position från cirkeln med en sinus ekvation som då orsakar att fienderna åker från vänster till höger relativ till cirkeln.

Anledningen till att jag använde en sinus ekvation till att få fienderna att röra på sig i sina relativa x och y positioner är för att den tidigare rörelse sättet som jag hade som bestod utav en if-sats som kollade om fiendens x-position var över en viss osynlig linje på skärmen som var satt i relation till cirkelns mittpunkt. Om fienderna hade överskridet denna position skulle de ändra riktning och åka neråt ett steg. Efter att jag hade mergeat min kod med en gruppkamrats kod så vägrade denna kod att fungera längre, vilket då ledde till att jag ändrade hur fienderna rörde sig helt och hållet med sinus ekvationen som ett förslag från en gruppkamrat.

Jag har också löst ett problem som jag hade då mina fiendeskepps texturer inte sparades i spritesen, jag förstår inte varför detta hände eftersom mina texturer var lagrade i fienderna själva och inte ändrade sin position i minnet men spritesen lyckades ände tappa bort de efter att de gick ut ur fiendeklassens konstruktorn. Jag hade fått hjälp av några tvåor och lyckades lösa problemet genom att ändra texturerna till textur pekare. Men varför de icke-pekare texturerna inte fungerade vet jag fortfarande inte.

Fiendeklassens manager hanterar skapandet, ritandet och uppdateringen av alla fiender som har blivit skapade i spelet. Den sparar alla fiender i en vector som den sedan plockar ur de ifrån för att rita och uppdatera de. Denna manager är inte helt klart än dock, den saknar funktionalitet för att kolla om fiendeskeppen har blivit träffad av spelar skott och förstör de och byter ut dess sprite med en explosion animation samt funktionalitet för att kolla om skeppen har landat på cirkeln.

Anledningen till att jag har gjort en manager för fienderna istället för att bara spara alla fiender i en vector och plocka ur de med enums är för att vi hade bestämt oss för att strukturera våran kod så att allting som inte var en enstaka object skulle ha sin egen manager som då kommunicerar med andra managers och skickar relevant information till de. Detta kodstruktur skulle förenkla hur vi kodar allting och organisera alla våra object så att vi kunde ha lättare koll på de.

2 reaktioner på ”Enemies och EnemyManager

  1. Hallå Affra.

    Jag förstår din lösning på problemet med fiendens rörelse, men jag känner att det kunde ha förtydligats varför fienderna måste röra sig neråt (in mot planeten i ett cirkulärt mönster) ur ett designperspektiv: Cirkulerar skeppen planeten för att sedan attackera? Varför rör de sig inte rakt ner mot planeten? Attackerar de på vägen ner eller är det bara väsentligt att stoppa dem från att nå hela vägen ner?
    Annars tycker jag att du förklarat din kod och struktur på ett lättförståeligt sätt med ett tydligt tankespår; skeppen är entities med en egen manager, de rör sig från vänster till höger relativt till planeten.

    Angående det texturrelaterade problemet du stötte på tidigare kanske jag kan ge lite insikt då jag skötte liknande programmering till min grupps projekt: Jag stötte på ett liknande problem; en sprite skapas, fast texturen känns inte igen och skapar bara en vit rektangel.
    Jag hade dock en manager för sprites som läste in texturer, som returnerar spritepekare att använda till entiteter. Jag använde mig av pekare för att lagra sprites i en vector där jag newade och pushade dem till vectoren. Jag gjorde dock problemet att jag läste in texturer till sprites utan att lagra dem på något sätt, så jag pushade dem till en map array, dels för att kunna återanvända samma textur, och då fungerade allt som det skulle igen.
    Nu, om jag förstod det rätt, fungerar dina texturer som de ska men ifall det skulle bli problem igen kanske det skulle gå att lagra dem i en array i din manager?

    Bra jobbat, och lycka till med projektet.

    /Erik N

    Gilla

Lämna en kommentar