Har det blivit någon kod ännu? Om vi nu ska använda C++, ska vi ha ett skriptspråk också?
Angående grafik etc: Jag tänker mig någonting ungefär såhär:
class AnimationFrame { AnimationFrame( resurs eller filnamn ); SDL_Surface *image; int xoff,yoff; int delay; AnimationFrame *next; };
class Sprite { float x,y,z; /* z används för att sortera i "höjdled" */ float scale; /* 1.0 är oskalad */ AnimationFrame *anim; void draw(SDL_Surface *target); };
Jag har inte skrivit nån C++ på mer än ett år, så Jerker kanske vill korrigera stil och syntax.
Ulf
Har det blivit någon kod ännu?
Nej, men jag tänkte nog börja ikväll eller imorgon. Om inte du hinner före?
Om vi nu ska använda C++, ska vi ha ett skriptspråk också?
Jag har funderat på det där och kommit fram till att för demons skull är det nog ingen vinst. Men jag tycker ändå att vi måste hålla isär manus och motor, så jag skulle föreslå att vi gör separata klasser som bär på manusinformationen på något sätt. Typ en klass som heter Scene med en metod som heter run(), på nåt sätt, kanske...
Angående grafik etc: Jag tänker mig någonting ungefär såhär:
OK, det ser vettigt ut, fast jag skulle nog föredra någon standardlista i stället för att länka med pekare, dvs:
class AnimationFrame { AnimationFrame(string resource); SDL_Surface* image; int xoff, yoff; int delay; // milliseconds };
class Sprite { float x, y, z; // z används för att sortera i "höjdled" float scale; // 1.0 är oskalad list<AnimationFrame*> anim; void draw(SDL_Surface* target); };
Eller förlorar vi något på det?
/Jerker
On Sat, Mar 15, 2003 at 04:12:01PM +0100, Jerker Hammarberg wrote:
Har det blivit någon kod ännu?
Nej, men jag tänkte nog börja ikväll eller imorgon. Om inte du hinner före?
Om vi nu ska använda C++, ska vi ha ett skriptspråk också?
Jag har funderat på det där och kommit fram till att för demons skull är det nog ingen vinst. Men jag tycker ändå att vi måste hålla isär manus och motor, så jag skulle föreslå att vi gör separata klasser som bär på manusinformationen på något sätt. Typ en klass som heter Scene med en metod som heter run(), på nåt sätt, kanske...
Angående grafik etc: Jag tänker mig någonting ungefär såhär:
OK, det ser vettigt ut, fast jag skulle nog föredra någon standardlista i stället för att länka med pekare, dvs:
class Sprite { float x, y, z; // z används för att sortera i "höjdled" float scale; // 1.0 är oskalad list<AnimationFrame*> anim;
^^^^ Ska det inte vara en iterator här i så fall? Spriten vet ju sin egen position i animationen, och animationen för en viss sprite kan ändras. (Jag är inte så bra på STL, så jag vet inte hur man borde göra.)
Eller förlorar vi något på det?
I det här fallet tycker jag det är naturligt att se animationen som en kedja av frames, som då kan vara loopad eller sluta i en annan animation. Men det går förstås att använda en lista också. Då får vi utöka med info om loopning etc.
Ulf
Aha, nu förstår jag bättre hur du hade tänkt - jag missförstod Sprite litegrann. OK, men då gör vi precis som du sa tycker jag.
Tänkte du hacka något i helgen? Kan vara bra att komma överens så att vi inte sitter och gör samma sak.
/Jerker
Kanske. Jag vet inte var jag ska börja riktigt. Har du nåt förslag?
Jag hade tänkt sätta ihop en supersimpel prototyp. Typ, ta den bakgrund vi har, de Odd-animationer vi har och göra så att han kan gå omkring i ett rektangulärt område när man klickar med musen. På så vis får vi ihop de primitiva grafikrutinerna (Sprite, AnimationFrame etc). Sen får man börja bygga nåt vettigt ovanpå detta.
Jag skulle gärna se att vi håller isär några olika abstraktionsnivåer, i princip så här:
Överst: Manus --------------------------------------- Mitten: Styrning --------------------------------------- Underst: Primitiv grafik/ljud/io ======================================= SDL
Den generella principen blir då att på en given nivå får man bara anropa rutiner på den egna nivån eller nivån närmast under. Översta nivån hanterar alltså alla objekt och figurer i spelet och vad som händer tex när man använder ett objekt eller på annat sätt interagerar med det. I mitten finns sånt som att få Odd att gå från en punkt till en annan och bläddra animationer, eller för att försöka göra en generell definition, allt som behövs för att styra grafik och ljud. Underst ligger sådant som just Sprite, AnimationFrame osv, allt som måste kommunicera direkt med SDL. Inladdning av resurser ligger också där.
Om någon undrar så är det inte något perverst strukturbehov som får mig att föreslå detta, bara erfarenheten att det blir så mycket lättare att göra utökningar och rätta fel om man kan hålla isär saker och ting på det här viset.
Så för att återgå till vad jag hade tänkt göra i helgen: Skriva nödvändiga delar av understa nivån och en experimentell mainfunktion i stället för mitten- och övernivån, så att man kan få se Odd gå omkring.
Vad tror du? Om du ändå tänkte hacka så kan kanske du implementera det du tycker är lämpligt ur understa nivån, definiera klasserna osv. Under tiden kan jag klippa isär eps-bilderna och checka in png-bilder enligt vad vi tidigare har kommit överens om. Kanske producera en liten trudelutt också...
/Jerker
Överst: Manus
Mitten: Styrning
Underst: Primitiv grafik/ljud/io
SDL
Den generella principen blir då att på en given nivå får man bara anropa rutiner på den egna nivån eller nivån närmast under.
Verkar vettigt, det är ju en rätt naturlig uppdelning.
Vad tror du? Om du ändå tänkte hacka så kan kanske du implementera det du tycker är lämpligt ur understa nivån, definiera klasserna osv.
Ok, jag ska se om jag kan få fram något tills i morgon. Jag kommer nog vara offline fram till dess.
Under tiden kan jag klippa isär eps-bilderna och checka in png-bilder enligt vad vi tidigare har kommit överens om.
Ok, en önskan från mig: Numrera efter mönstret 001, 002 etc, så att det går att ladda in bilderna i "alfabetisk" ordning och få ordningen på framesen rätt.
Jag kan rekommendera programmet "animate" från Imagemagick för att titta på ett gäng bilder som animation (så man ser att de är rätt centrerade etc).
Kanske producera en liten trudelutt också...
Trevligt.
Ulf