torsdag 13 februari 2014

Jag har denna vecka för det mesta suttit och pysslat med att få fiender till att fungera. Måttligt framgångsrikt hittills men det ska nog gå att lösas under helgen.
Jag började med att skriva en fiende klass som håller koll på dom gemensamma sakerna för fiender. Fiende klassen ärver från våran spelobjekt klass som jag skrev förra veckan. Spelobjekt klassen håller koll på vad saker och ting är, vad dom har för sprite, vad dom har för collider och flaggor (ifall att vi skulle vilja ha något speciellt på spelobjekt nivå). Fiendeklassen håller sedan koll på saker som är speciella för fiender. Exempel på dessa saker är: Hälsa, om dom kan skjuta eller inte och rörelsehastighet.  Sedan har vi själva fiendetyp klassen, den första är våran standard fiende, dom slöa barnen. Den jag hade mest problem med att skriva, mestadels för att jag inte kom på riktigt vad den skulle innehålla. Efter en stunds funderande kom jag dock på att den bara behöver innehålla rörelsemönstren och attackmönstren för fienden, efter som att det är det enda som skiljer som olika fienderna åt. Så för standard fienden fick det bli ett väldigt enkelt rörelsemönster. Är spelaren inom räckvidd ska dom springa mot honom/henne och när dom kommit fram ska dom börja smutsa ner spelaren. För att hålla minnet på en stabil nivå har jag även gett våran motor en variabel som håller koll på vilken sprite som ska användas till dom vanliga fienderna. Detta för att slippa ladda in bilden om och om igen och därmed skapa minnesläckor. Jag lärde mig att detta kunde vara en bra idé i mitt förra projekt där programmets ram andvändning ökade med 5-10mb/s, vilket inte är riktigt optimalt. Med andra ord, jag ska se till skriva koden mer eftertänksamt den här gången, så att detta projekt inte har några läckor alls. Dock eliminerar det ju min möjlighet att åter vinna tävlingen om vem som har mest minnesläckor, men man kan ju inte vara bäst på allt =p


Här är ett screenshot av hur spelet ser ut för tillfället:















När jag var färdig med själva fiendeklassen (med sub-klasser) började jag att skriva på en timer som kan hålla koll på när det ska komma fram en ny fiende. Det hela tog inte väldigt lång tid eftersom jag redan hade experimenterat lite med hur man skulle kunna göra en timer i SFML (biblioteket vi skriver emot).  Det som gjorde det så lätt var att det redan fans vissa enklare inbyggda funktioner i SFML som räknade uppåt, så det enda som behövde göras var att lägga in ett värde som man skulle börja på och sen när den inbyggda klockan räknar upp, får man ett värde att ticka neråt.

Men men, nog skrivande här. Dags att återgå till kodandet.

3 kommentarer:

  1. Kul att se att det går framåt. Bra att du har minnesförbrukningen i åtanke under utvecklingen så att varje asset inte laddas in mer än en gång. Skall bli kul att se när fienderna kommer in i spelet.

    SvaraRadera
  2. Hej! Intressant text, skitbra att du tänker på minneshanteringen då det är en sådan sak som kan bli jobbigt längre fram i projektet. Håll även koll på hur programmet hanterar att sätta fönstret till fullscreen. Det vi har märkt är att minnesanvändningen ökar då pga av att SFML skapar nya fönster vid byte mellan fullscreen och window.
    En annan tanke är att namngivningen kanske inte är helt ideal; slöa barn har tyvärr en tendens att associeras med handikapp. Testa att kanske döpa den till” slow moving kid” så undviker man många obekväma situationer.
    Återigen med minnesläckage så kan du ha som tumregel att för varje gång du ”new”-ar ett objekt så var noggrann med att alltid skriva en procedur att ta bort objektetet när ”clean-up” körs.
    Bra uppdelning mellan klasserna. Rent generellt mellan alla grupper så råder jag er att börja implementera states så tidigt som möjligt (vet inte om ni har det men tänkte tipsa liksom).
    I framtida bloggposter borde du ha en rubrik för att underlätta navigeringen på bloggen samt särskrivningen och stavningen. Försök hålla den så formell som möjligt och undvik talspråk.
    Annars verkar du vara på god väg med din AI, det jag ser som nästa hinder är: Vad händer ifall det är en vägg av något slag mellan spelaren och barnet? Hur kommer barnet reagera då? Hur kommer kollision funka då?

    SvaraRadera
  3. Hello. Interesting text and, in your case, very needed code. Now I don’t know if you’ve changed a lot of the design and the games content, but going from what was shown at the presentation last year taking an enemy “down” is, and correct me if I’m wrong, really the whole, and only, challenge of the game. It just seems like that is the major feature of the game as well. So from my point of view it is really needed to have enemies in the alpha, and even the pre-alpha. Great of you to remember to think about memory management, it can really screw things up later if not fixed right away. So you really learned from your mistakes from the project during the last course.

    I agree with you on the timer, that it’s very simple. Especially considering that SFML has its own Clock class. Using that and a float you can simply get a very simple timer like this:

    sf::Clock clock;
    float timer;

    timer += clock.restart().asSeconds();

    if(timer > value)
    {
    timer = 0;
    Do stuff here
    }

    Some things I have to point out with your text. Write your posts the way the instructions say, which in this case means write it in English. I also had some trouble keeping track of where I was in the text, so some paragraphing would be great! And just like Simon(slowpork) said, you should avoid using parlance and keep it professional.

    But overall it was an interesting read and it looks like you’re going forward with you project. I wish you the best of luck during the remainder of it!

    SvaraRadera