Hlavní navigace

Vlákno názorů k článku SDL: Hry nejen pro Linux (10) od anonym - Tak jsem nahodou zabrousil na tento clanek a...

  • Článek je starý, nové názory již nelze přidávat.
  • 26. 4. 2005 16:18

    anonymní
    Tak jsem nahodou zabrousil na tento clanek a vyzkousel jsem uvedeny priklad s oknem, ktere jen ceka na klavesy. Prekvapilo me, ze to vytoci procesor na plne obratky. To by slusne vychovany program delat nemel, zvlaste kdyz nedela nic moc nez ceka na klavesu.

    Zmenil jsem tedy funkci SDL_PollEvent za SDL_WaitEvent a pak uz jsem byl spokojeny. Podotykam, ze o SDL nic nevim a serial jsem necetl od zacatku. Pouze si myslim, ze bychom nemeli ucit uzivatele delat programy, ktere uzurpuji veskery vykon procesoru pro sebe (doba MSDOSU, kde takove programy mely sve opodstatneni, uz pominula).

    Zdravim

    Petr Olsak
  • 26. 4. 2005 18:43

    bez přezdívky
    Opodstatneni neopodstatneni, v DOSu jsi predevsim nemel na vyber. Teda pokud nepocitame moznost volat instrukci hlt.
  • 27. 4. 2005 0:12

    Michal Turek
    Máte pravdu, v tomto případě nenacházím dostatečnou omluvu :-(

    V počítačových hrách se obecně problémy tohoto typu nevyskytují. Programátoři spíše řeší otázku, jak přinutit hru, která už sama o sobě zabírá 100% procesoru, aby běžela ještě o nějakou tu desetinku FPS rychleji. Z tohoto důvodu se většinou ostatní procesy ignorují a vše se nechá běžet, jako zde, v cyklu, který je nejrychlejším řešením. Nicméně globálně souhlasím, že je rozdíl mezi programem, který čeká na stisky klávesy a programem, který v každém cyklu renderuje sto tisíc trojúhleníčků.

    No, když nic jiného, mohl jsem alespoň přidat nějakou podmínku, která při FPS vyšším než je určitá hodnota zavolalo SDL_Delay(). V dalších článcích (které jsem ještě neodeslal do redakce) se na to pokusím myslet...

    Mimochodem SDL_WaitEvent() je vhodné řešení pro tento "speciální" případ, ale obecně se moc ve hrách nevyskytuje. V případě prázdné fronty událostí by se všechno zastavilo (animace apod.). Něco málo o tom bude v příštím dílu.
  • 28. 4. 2005 15:47

    anonymní
    Ja osobne nemam rad ani hry, ktere vytezuji procesor zbytecne na 100%. Takove hry nemaji na mem pocitaci vubec misto.

    To, co pisete o animaci, by se vse melo resit timerama, tj. animace bezi podle nastaveni timeru
    a neuzurpuje si cely procesor pro sebe. Takto se mel udelat i dalsi priklad, na ktery jsem se namatkove podival: polopruhledna koule putujici po duhovem pozadi, pate pokracovani.

    Pokud by nekoho napadlo udelat "screensaver" tak, jako je v uvedenem prikladu s kouli, pak to neni saver niceho: ani obrazovky a navic to zahriva na plny vykon procesor. Tohle se typicky ma delat pres timery: pak to nebere procesoru skoro zadny vykon.

    Zdravim

    Petr Olsak
  • 28. 4. 2005 19:27

    Michal Turek
    No, já se systémovými timery na podobné aplikace zrovna dobré zkušenosti nemám. Jsou sice dobrý, když chcece něco spouštět jednou za 100 milisekund a více, ale na něco trochu častějšího, jako je aktualizace scény, se vůbec nehodí, protože se všechno stává extrémně trhaným. Navíc není zaručeno, že aplikace dostane všechny zprávy (ve frontě může být vždy jen jedna, další se nevloží).

    Z mého pohledu je pravděpodobně nejlepší renderování v cyklu a pokud je FPS vyšší než řekněme sto, program na chvíli uspat.