dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

[SDL] 2D animācija, freimreits
Goto page 1, 2  Next
 
dev.gamez.lv Forum Index -> Grafikas programmēšana un teorija
View previous topic :: View next topic  
Author Message
Tankists



Joined: 18 Dec 2006
Posts: 81
Location: Baldone

PostPosted: Fri Sep 05, 2008 5:58 pm    Post subject: [SDL] 2D animācija, freimreits

Taisot savu pirmo 2D spēli ar C++, SDL sastopos ar nelielu problēmu. Galvenajam varonim kā jau saprotams ir animācija, lai izskatītos ka varonis skrietu, bet man šī animācija ir atkarīga no freimreita, t.i. ja freimreits ir pārāk liels, tad animācija rādās tik ātri, ka pat īsti nevar saprast, ka varonis kustās, bet ja freimreits ir mazs, tad spēle paliek nebaudāma. Meklējot ar Googli atradu kādu Mario Wars spēli, kas taisīta ar SDL un C++, kurai ir tieši tāds rezūltāts, kādu es vēlos panākt, t.i. freimrets pietiekami liels, lai viss kustētos plūstoši, un animācija kustētos savā tempā. Diemžēl links uz sourci bija saplīsis. :(

Freimreitu kontrolēju tā, kā iemācījos Lazy Foo tutoariālī. Nav ne mazākās nojausmas cik tas ir pareizi vai nepareizi, tāpēc vēlos no pieredzējušiem game dev`iem dzirdēt viedokli.

Lietas, kas man nav īsti skaidras:
Kā pareizi ir rīkoties ar freimreitu?
Kāds īsti ir optimālais freimreits, kas ir 2D spēlēs?

Paldies jau iepriekš.
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Sep 05, 2008 6:07 pm    Post subject:

var darīt šādi:

animācijas_laiks += delta_laiks * animācijas_ātrums;
if( animācijas_laiks >= animācijas_max_laiks )
{
animācijas_laiks = 0;
}

un atrodot īsto kadru:
kadrs = (int) animācijas_laiks;

kopumā - visām darbībām, kuras atkarīgas no laika, jāpieskaita delta_laiks jeb tas laiks, kurš parāda, cik ilgi tika apstrādāts iepriekšējais kadrs. (nesen tev jau par to stāstīja šeit citā topikā, ja pareizi atceros)

optimālo freimreitu neviens nepateiks
tas ir atkarīgs no datora un tā, ko vajag izdarīt spēlei, un tāpat vajag veikt testus ar optimizētu kodu (kaut gan nav pat zināms, cik daudz jāoptimizē), un tad būs tas optimālais freimreits, kura iegūšanai vajadzēja optimālo freimreitu Shocked

tā kā par to pagaidām neuztraucies, bet, ja spēle galīgi lēna kļūst ne no kā, tad gan jāuztraucas vai jāliek topiks šeit, jo tas nozīmē, ka vai nu pieļauta kļūda, vai (ja lietots OpenGL) karte neatbalsta kādu iespēju un viss sāk strādāt bez videokartes paātrinājuma (software modē) Wink
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Tankists



Joined: 18 Dec 2006
Posts: 81
Location: Baldone

PostPosted: Fri Sep 05, 2008 6:41 pm    Post subject:

Laikam neesmu tik pieredzējis, ka līdz galam neizpratu tavu ideju, bet izskaki vismaz savu viedokli par šādu ideju, kas skatoties tavu variantu ienāca prātā: pārslēgties uz nākošo animācijas freimu, tikai ik pa 10 freimiem, ņemot vērā, ka freimreits ir 60fps...?
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Sep 05, 2008 7:19 pm    Post subject:

tur tā problēma, ka kadru skaits sekundē varētu nebūt 60, pietam bieži

skatos, ka tajā Lazy Foo tutoriālī ir kadru skaita limitētājs, nevis game loops, kurš tam pielāgojas..

nu tādā gadījumā to "delta_laiks" var izņemt un tikai regulēt mainīgo "animācijas_ātrums", līdz animācija iet īstajā ātrumā..

hm...
Quote:

...bet man šī animācija ir atkarīga no freimreita, t.i. ja freimreits ir pārāk liels, tad animācija rādās tik ātri, ka pat īsti nevar saprast, ka varonis kustās, bet ja freimreits ir mazs, tad spēle paliek nebaudāma.

Freimreitu kontrolēju tā, kā iemācījos Lazy Foo tutoariālī. Nav ne mazākās nojausmas cik tas ir pareizi vai nepareizi, tāpēc vēlos no pieredzējušiem game dev`iem dzirdēt viedokli.

Šie abi nesaskan.
ja tu tiešām kadru skaitu tā kontrolē, tad tur nebūtu jābūt animācijai atkarīgai no FPS.
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Tankists



Joined: 18 Dec 2006
Posts: 81
Location: Baldone

PostPosted: Fri Sep 05, 2008 7:49 pm    Post subject:

Tieši tā arī kontrolēju. Sanāk, ka katrā kadrā tiek pārbaudīts, vai ir pagajušas 1000 / FPS milisekundes, ja nav, tad SDL_Delay atlikušo laiku.

Animācija zīmējās man šitā:
Code:

if (xVel < 0)
{
   status = TURNED_LEFT;
   frame++;
}
else if (xVel > 0)
{
   status = TURNED_RIGHT;
   frame++;
}
else
{
   //ja nekustās
   frame = 0;
}

if (frame >= 4)
{
   frame = 0;
}

if (status == TURNED_LEFT)
{
   imageHandler->applySurface(box.x, box.y, player, screen, &clipsLeft[frame]);
}
else if (status == TURNED_RIGHT)
{
   imageHandler->applySurface(box.x, box.y, player, screen, &clipsRight[frame]);
}


(ceru ka saprotami)

Par cik varonis tiek zīmēts katrā freimā, arī animācija regulējās katrā kadrā.
Labprāt iemācītos nevis kontrolēt FPS, bet to ko tu domāji, varbūt ir kāds links?
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Sep 05, 2008 8:14 pm    Post subject:

Tankists wrote:
Sanāk, ka katrā kadrā tiek pārbaudīts, vai ir pagajušas 1000 / FPS milisekundes, ja nav, tad SDL_Delay atlikušo laiku.

tāpēc jau animācijai vajadzētu iet neatkarīgi no kadru skaita sekundē

Tankists wrote:
Labprāt iemācītos nevis kontrolēt FPS, bet to ko tu domāji, varbūt ir kāds links?

http://dewitters.koonsolo.com/gameloop.html
http://www.gaffer.org/game-physics/fix-your-timestep

iesaku lietot vismaz to game loopu, kurā izmanto laika akumulatoru, un tam iziet cauri pa mazām laika daļām
(3. no otrā linka)
ar otro problēmas rodas tieši pie ātro datoru īpašniekiem -
parādās diezgan daudz nesaprotamas kļūdas
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Tankists



Joined: 18 Dec 2006
Posts: 81
Location: Baldone

PostPosted: Fri Sep 05, 2008 8:51 pm    Post subject:

Paldies, tiešām labs lasāmais par game loop tas pirmais. Smile
Domājams ka problēmu nebūs ar animāciju un freimreitu.
Back to top
View user's profile Visit poster's website
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: Sat Sep 06, 2008 11:44 am    Post subject:

Code:

if (frame >= 4)
{
   frame = 0;
}



Code:
frame %= 4;

_________________
Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 06, 2008 12:47 pm    Post subject:

Storm wrote:
Code:
frame %= 4;

O, jā, "super" priekš tāda, kurš vēl mācās - optimizēts kods skaidra, viegli saprotama koda vietā Very Happy
Un, omg, viņš nenormāli ( Laughing ) paātrina spēli, jā! Laughing
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sat Sep 06, 2008 1:47 pm    Post subject:

šņak: tu jau nu esi īstais, kam pārmest tāda koda rakstīšanu. Paskaties vispirms uz sevi, pirms runāt par citiem: http://dev.gamez.lv/viewtopic.php?t=1513 (un tas nav vienīgais topiks).
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 06, 2008 2:40 pm    Post subject:

stfu, es mācos. un nemācu nepareizi.
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sat Sep 06, 2008 2:56 pm    Post subject:

snake5 wrote:
stfu, es mācos. un nemācu nepareizi.

frame %= 4; ir nepareizi?
Tavs kods, snake, paarbauda, vai frame ir lielāks par 4 un, ja ir, tad frame = 0. A ko tavs kods izdarīs, ja būs pamazs framerate un frame uzleks uz 5? Tavā kodā, snake, frame = 0 (animāciju šajā vietā atpaliek), bet Storm kodā 1 (kā arī vajadzētu būt).
P.S. Iespējams, ka šāda situācija nekad nenotiks, bet tu, snake, runāji par nepareizu kodēšanu. Tad tieši tavs kods ir nepareizs.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 06, 2008 3:31 pm    Post subject:

tur, jā, sorry, kļūdījos, bet to var vienkārši salabot
Code:

frame -= 4;


btw, es nerunāju par nepareizu kodu, bet par to, vai vajadzība optimizētu kodu likt skaidra koda vietā.
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Sat Sep 06, 2008 3:55 pm    Post subject:

Atkal nepareizi! Un ja frame = 10? Buus jaataisa while(frame >= 4) frame -= 4. Tev tieshaam tas liekas saprotamaak/skaidraak kaa frame %= 4?
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sat Sep 06, 2008 4:08 pm    Post subject:

ok, nesteigšos, tā vnk nevaru normāli padomāt.

btw, tev tiešām liekas, ka viņš paņems tādu game loopu, kurā delta time būs nevis sadalīts un katra daļa padota update funkcijai, bet tā, ka visu delta time pados update funkcijai?
tā nu noteikti nebūs vienīgā problēma, kuru vajadzēs atrisināt tādā gadījumā.

Ja kodu lasot, to pat izņemtu no funkcijas var labi saprast, tad tas ir skaidrs. Varu derēt, ka kompilētājs pats ar to tiktu galā.
Tā nav skriptu valoda. Zinu, ka, piemēram, Game Maker'ā vajadzētu to "frame %= 4;" kaut vai dēļ tā, ka optimizēt kodu Game Maker'is neprot.
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Grafikas programmēšana un teorija All times are GMT + 2 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group