SDL časovač – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SDL časovač – C / C++ – Fórum – Programujte.comSDL časovač – C / C++ – Fórum – Programujte.com

 

vollf820
Stálý člen
4. 11. 2008   #1
-
0
-

Zdravím,

jsem z toho už na prášky takže bohužel mi nezbývá nic jiného, než se svěřit zase sem. Moje vize je taková, že mám krychli (tu už opravdu mám) vytvořenou v OpenGL a chci, aby při zmáčknutí levé šipky se otočila o 90° doleva, ale plynule, pomalu (dejme tomu otočení bude trvat 3 - 5 sekund) aby to bylo vidět. Dále nechci, aby to, dokud neskončí pohyb, neregistrovalo držení šipky (aby se nenačitalo dopředu pořád točení, ale do toho se pustím pak). Můj problém spočívá ve zpomalení té rotace. Mám udělanou třídu atd. ale vypíšu sem jen důležité části toho kódu.

Hlavni funkce (hlavni.cpp)



int WINAPI WinMain( HINSTANCE hInstance, // Instance
HINSTANCE hPrevInstance, // Previous Instance
LPSTR lpCmdLine, // Command Line Parameters
int nCmdShow) // Window Show State
{
MSG msg; // Windows Message Structure
BOOL done=FALSE; // Bool Variable To Exit Loop
.... .... ...
if (keys[VK_LEFT])
{
// yrot+=0.2f;
utvar.otoc('l'); // při zmačknutí levé šipky se zavola funkce ze třídy (tohle funguje)
...


Soubor se třídou cube.cpp




void tr::otoc(const char c)
{
int r = SDL_GetTicks();
int h = 0;
int m = f; // f je privátní proměnná třídy, udává momentální úhel natočení do funkce glRotatef(f, 0.0f, 1.0f, 0.0f);
... .... ....
switch(c)
{

case 'l':

while(f<=(m+45)) // z testovacích důvodů momentálně nastaveno otáčeni po 45°
{

if(SDL_GetTicks() < r + 1000) // pokud aktuální čas získaný v tomto bodě je menší než čas v r + 1 sekunda začni cyklus
// while znovu (tohle by mělo dělat zpomalení otáčení)
{
continue;
}

f++; // zvětši o 1° (teoreticky by tedy rychlost otáčení měla být 1° za 1 sec
r = SDL_GetTicks(); // načte do r aktuální čas
}

break;
case 'p':


Bez časovače a všeho okolo mi kostka normálně rotuje dokud držím klávesu (dost rychle ale) takže bych jinde chybu neviděl. Ale při tomhle použití co sem tu vypsal, jakmile zmačknu šipku doleva, program se kousne. Divný ovšem je, že když to trasuju, funguje to jak má, f se zvětšuje o 1° dokud to nedojede do 45° a normálně pokračuje dál, tak nevim proč se to při normálním spouštění kouše. Inspiroval jsem se tímto tutoriálem - http://nehe.ceske-hry.cz/cl_timer.php tak díky za rady, případně nápady jak to vylepšit. Kdybyste chtěli kompletní kod tak ho sem postnu.

kuju

Nahlásit jako SPAM
IP: 91.195.106.–
o-lox0
Super člen
4. 11. 2008   #2
-
0
-

rozdil=GetTicks-r-1000;

if (rozdil<0)
místo continue dej rest(-rozdil);
tohle je kosmetika.

Já bych to dělal ale jeste jinak - přes install_timer();
a volání my_timer procky.

EDIT (pripomenul jsem si SDLko :)

Nahlásit jako SPAM
IP: 85.71.152.–
o-lox0
Super člen
4. 11. 2008   #3
-
0
-

Podle toho tutorialu co tam mas odkaz, nevykreslujes prubezne scenu a pricitas jen do f, nebo to jsi upravil?

Máš to ošetřovat mimo Event klávesnice, já bych to klidně předělal,
(pokud chceš aby ti do toho někdo rejpal.. :()

přiřazení otoc='l' u klaves Eventu
if otoc=='l' Otaceni normalne v hlavnim cyklu (přičtenim f)
překreslení, žádný tr::otoc..

Nahlásit jako SPAM
IP: 85.71.152.–
vollf820
Stálý člen
5. 11. 2008   #4
-
0
-

Ahoj,

díky za radu :) Ja nejedu podle toho tutoriálu, tam sem jen koukal na způsob jak se dělá časovač, jinak je to celý můj projekt ;)

Omlouvám se za neznalost ale co znamená

rest(-rozdil)

??

Pokud na to máš skutečně náladu, tak to klidně přepiš jak bys to dělal ty, já se rád přiučím. V programovaní jdou psát stejné věci několika způsobama a ne vždy je lehký určit, kterej je ten nejlepší. To co jsi tu napsal beru jako takovy nakousnutí, v celku mi nenapadá jak si to myslel :)

Jestli chceš tak napiš a já sem postnu celý kódy, ať máš přehled jak to vlastně vypadá v celku.

Nahlásit jako SPAM
IP: 91.195.106.–
o-lox0
Super člen
5. 11. 2008   #5
-
0
-

Čau
rest() je SDL_Delay() já se zmiňoval, že jsem se v 1postu nenapojil hladce a přímo na konvenc
SDLka.

Jsem takový nahlodávač neb by mi ústa upadla, a mám práci a rychleji je to rovnou editovat do
kódu než radit.
Tady můj exáč - 5 minutek, tím chci říct, postuj mi to raději na maila pro přehotovení,
jsem občas velkorysý a SDLko mě dosti baví. Další prosypaný minuty mi určitě neublíží.
Rady se mi nějak rozvádět nechtějí musel bys "trošku" více páčiit u dané klíčové části :)

Nahlásit jako SPAM
IP: 85.71.152.–
vollf820
Stálý člen
5. 11. 2008   #6
-
0
-

No to je přesne to o co mi šlo :) Jen bych spíš chtěl vidět kód pro inspiraci. Tak já ti písnu na mejla ok?

díky

Jo jeste jedna věc. Napadá tě příčina, proč můj způsob nešel?? Myslím v tom kousku kódu co sem sem postnul na začátku jestli je nějaká závažná chyba který sem si nevšim, jako že by to tam něco zacyklilo apod. protože jak sem psal, se to kousne po zmačknutí šipky vlevo (což by mohlo bejt zacyklení). Ale kdyz se na to podívám, mělo by to jít.

Nahlásit jako SPAM
IP: 91.195.106.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 28 hostů

Podobná vlákna

Časovač — založil aTTix

časovač — založil xeonikx

Časovač — založil zgerbiak

Casovac — založil Odin

časovač — založil Pikin88

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý