Timery
Ostatnio zmodyfikowano 2011-04-26 18:35
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: if( walk_nr >= frames_amount ) walk_nr = 0; else walk_nr += delay_walk * delta_time;
walk_frame = walk_nr; tex_x = walk_anim[ walk_frame ];
A szybkosc poruszania sie w ten sposob: 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? |
|
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 :) |
|
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: ticks = timeGetTime(); delta_time = ticks - last_ticks; if( delta_time > Timer ) { 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: |
|
pekfos |
» 2011-04-26 18:28:36 co 100ms? 10 FPS to mało.. |
|
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 |
|
« 1 » |