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