Inledning
Denna utmaning handlar om lite grundläggande OOP tillsammans med XNA. Du ska få träning på att skapa och använda egna klasser.
Del 1 - Grafiken
Skapa ett XNA-projekt och döp det förslagsvis till Donuts. Ladda sedan hem grafiken nedan och se till att du laddar in den i ditt program. Obs. använd BMP-filen från ZIP-filen annars får du grafikproblem.
Som du ser så är bilden uppbyggd av 5x6 frames. Varje frame är 64x64 pixlar stor. Läs mer om animationer i artikeln Animationer . När du senare ska rita ut en donut med hjälp av grafiken så ritar du bara ut den första 64x64 pixlars bilden.
Del 2 - Klassen Donut
Utmaningen går ut på att skapa en egen klass vid namn Donut som ska ingå i ditt projekt. Du lägger till och skriver klassen själv. Klassen ska innehålla:
- En medlemsvariabel av typen Vector2 för att hålla reda på var donut'en finns på skärmen.
- En medlemsvariabel av typen Texture2D som håller reda på vilken grafik som ska användas.
Variabelnamnen är valfria.
Klassen Donut ska även ha en konstruktor som tar emot två parametrar: en Vector2 och en Texture2D. Varje objekt av typen Donut ska alltså hålla reda på sin position och sin grafik. Detta kallas för objektens attribut. I konstruktorn måste du lagra inparametrarna i objektens attribut.
Sist men inte minst ska du ha en metod vid namn Draw med en inparameter av typen SpriteBatch. Returtypen ska vara void. Inparametern använder du för att rita ut grafiken på skärmen.
Del 3 - Användning
I ditt projekt så skapar du nu en variabel av typen List som lagrar objekt av typen Donut (nedan kallad myDonuts). Denna lista ska du senare kunna fylla med donuts genom att skriva:
Vector2 tmpV = new Vector2(200, 200);
myDonuts.Add(new Donut(tmpV, gfx));
Där variabeln gfx är grafiken som ska användas till donut'en som du tidigare har laddat in. tmpV är en Vector2 för att bestämma positionen på donut'en.
Ändra i din Update()-metod så att du avläser musknapparna. Varje gång du trycker ned vänster musknapp så ska du skapa en ny Donut som läggs i din lista. Positionen ska vara samma som muspekarens position.
I Draw()-metoden så lägger du till en loop som går igenom alla dina donuts som du har i din lista. På varje objekt anropar du Draw()-metoden som är implementerad i din klass Donut.
Du kan avsluta med att alltid rita ut en donut som följer muspekarens position. På så sätt vet du var du har muspekaren på skärmen.
Ju fler gånger du trycker på musknappen desto fler donuts hamnar på skärmen. Det bör se likna bilden nedan:
Del 4 - Olika varianter
Eftersom vi skickar med en Texture2D i det ögonblick som vi skapar en Donut så kan vi ju välja att skicka en anna textur än den röda. Ladda hem texturen nedan och se till att den laddas in i ditt program.
Utöka din Update()-metod så att du kan avläsa höger musknapp. Klickar du på höger musknapp så skapar du en donut med den nya texturen som inparameter och lägger den i samma lista som tidigare. Efter lite klickande så kan det se ut som bilden nedan:
Del 5 - Mer beteende
Nästa del går ut på att bygga in mer beteende i klassen Donut. Donut ska nu animeras och växla mellan vilken frame som ska visas beroende på vad tiden är. Återigen kan det vara en idé att läsa artikeln Animationer . Alla variablar som kommer att behövas för detta måste du bygga in i klassen Donut.
Vi behöver också en ny metod som lämpligen kallas Update() så att vi kan anropa denna varje gång vi vill att objektet ska uppdatera sig själv. Som inparamter till Update() behövs en variabel av tiden GameTime så att vi har möjlighet att mäta tiden.
Ändra även i implementationen av Draw() i Donut så att rätt rektangel används beroende på vilken bild/frame som är aktuell att visas.
En liknande loop som vi har i spelets Draw() behöver vi nu i spelets Update() för att gå igenom listan med donuts och anropa Update() på dem. Resultatet bör likna: