Mole Munch – Dev log 4
|
Den här veckan har jag jobbat på att få bort alla minnesluckor som vi hade i vårat spel. En minneslucka är när man lagrar minne på ”heap” minnet. I Vårat spel så skapades minnesläckor väldigt ofta. Varje gång vi gjorde ett nytt objekt så skapades minnesläckor. Så när vi i början av spelet skapade 50 olika objekt som till exempel jordgubbar och mullvaden så uppkom flera minnesläckor. På bilden nedan ser man flera objekt i spelet. Till höger om mullvaden finns jordgubbsplantor, några av jordgubbsplantorna är redan tagna av mullvaden. När mullvaden tagit en jordgubbsplanta så kan man ta bort den. I vårat fall så sätter vi jordgubbsplantan till osynlig och ej aktiv. För att sedan ta bort alla objekt i spelets dekonstruktor. Du kan läsa mer om vår dekonstruktor längre ner i texten.
För att ha struktur i vårat projekt så har vi lagt in alla våra objekt i olika listor. Till exempel så är alla våra grönsaker i samma lista. Så i vår dekonstruktor kunde jag gå igenom den här listan, kolla vilka objekt som fortfarande var aktiva, sedan ta bort dem från ”heap” minnet. Detta gjorde jag för varje lista i spelet, men också för vissa andra objekt som skapats på andra sätt utanför listorna. För att hitta vart alla minnesläckor skapades så använde jag mig av ett program som heter ”Visual Leak Detector”. Detta programmet kan vara ett av de svåraste program jag någonsin arbetat med. Det första problemet uppstod när jag skulle installera det. Jag installerade version 2.3 av programmet, då fick jag feedback som berättade att jag inte hade en enda minneslucka i spelet. Eftersom jag visste att jag hade minnesläckor i spelet så hörde jag med några andra som går samma kurs, och då fick jag reda på att han använde version 2.4rc2 av programmet. Efter flera problem med att installera programmet med rätt version så fick jag det äntligen att fungera. När programmet till slut var installerat så fungerade det väldigt bra, man kunde lätt se var i koden som minnesläckan skapades, och sedan var det bara att ta bort det som beskrivet tidigare i texten. |
För att ta bort minnesläckor så måste man ta bort objekten som man skapat. Oftast tar man bort objekten när de inte längre ska vara med i spelet. Man kan som i förra exemplet ta bort objektet direkt när det försvinner ur spelet. Eller så kan man ta bort alla objekt i spelets dekonstruktor. En dekonstruktor är en funktion som kallas automatiskt när ett objekt tas bort. När spelet körs så är spelet i ett så kallat ”Game state”. När spelet är slut, eller när ”Game state” är över, så kallas dens dekonstruktor. Därför så var det där som jag skulle ta bort alla objekt.