Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Timery

Ostatnio zmodyfikowano 2011-04-26 18:35
Autor Wiadomość
Savail
Temat założony przez niniejszego użytkownika
Timery
» 2011-04-26 18:11:23
Hej
Tak podczas przerabiania swojej gry z Opengl'a na DirectX zastanwiam sie czy metoda ktora zastosowalem do pomiaru czasu w swojej grze jest oplacalna i wydajna... Gra ktora tworze bedzie sie bardzo opierala na timerach gdyz ma to byc bijatyka...
A wiec ja to robie tak, mam 3 zmienne Ticks, LastUpdate, DeltaTime:
1. Pobieram czas od rozpoczecia programu(zmienna Ticks)
2. obliczam roznice pomiedzy 1 a 4(zmienna DeltaTime)
3. Czynnosci timerowe(walka, poruszanie sie itd)
4. Przypisuje zmiennej LastUpdate wartosc zmiennej Ticks

Co do punktu 3:
Zmiany klatek animacji obliczam w ten sposób:
C/C++
if( walk_nr >= frames_amount ) walk_nr = 0;
else walk_nr += delay_walk * delta_time; // wynik walk_nr bedzie zmiennoprzecinkowe

walk_frame = walk_nr; // walk_frame to int i w ten sposob obcinam czesc ulamkowa od walk_nr i zapisuje czesc calkowita do walkframe
tex_x = walk_anim[ walk_frame ]; //Wyswietlam odpowiedni kawalek bitmapy

A szybkosc poruszania sie w ten sposob:
C/C++
pos_x += walk_speed * delta_time;

Wbrew temu co moze sie wydawac timery dzialaja i na kazdym kompie z takim samym speedem wszystko bedzie sie robilo... jednak sam odnosze wrazenie ze troche to przekombinowane jest ;p. Jak by to zrobic efektywniej?
P-32042
DejaVu
» 2011-04-26 18:20:09
Napiszesz grę, przetestujesz i będziesz wiedział czy jest efektywne czy nie :)

/edit:
A co do przekombinowania... - każdy sposób dobry, który prowadzi do celu :)
P-32043
Savail
Temat założony przez niniejszego użytkownika
» 2011-04-26 18:26:41
dziala bez zarzutów i plynnie, juz to wiem, ale nie sadze zeby tak timery byly pisany wlasnie w taki sposob np w jakisch fps'ach itd :P. Cos takiego np:
C/C++
ticks = timeGetTime();
delta_time = ticks - last_ticks;
if( delta_time > Timer ) //Timer np 100 czyli ekran aktualizuje sie co 100 milisekund
{
    //Poruszanie sie walka itp(juz wszystko bez mnozenia przez delta_time)
    Input::Obj().last_ticks = Input::Obj().ticks;
}
odpada bo o ile klatki animacji zmieniaja sie plynnie i bez zarzutów to poruszanie sie postaci sie zacina:
P-32045
pekfos
» 2011-04-26 18:28:36
co 100ms? 10 FPS to mało..
P-32046
Savail
Temat założony przez niniejszego użytkownika
» 2011-04-26 18:35:19
stosujac cos takiego poruszanie sie nie zacina tylko gdy porusza sie o 1 pixel co 100 ms :P, ewentualnie 2 lub moze 3
P-32047
« 1 »
  Strona 1 z 1