Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - Kopacz

Strony: [1] 2
1
Szkółka / Odp: Predkosc pilki i pada w grze.
« dnia: Wrzesień 20, 2015, 19:13:06 »
Obstawiam, że w konsoli będziesz tu miał małe pole manewru. Zapewne pozycja x to liczba całkowita, stąd też starczy że zamienisz inkrementacje/dekrementacje tej pozycji na zwiększanie/zmniejszanie jej o 2. Ale lekkie przyśpieszenie (np. o 20%) będzie tu raczej niemożliwe, chociaż mogę się mylić.

2
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 23:18:42 »
Tamto nie działało, bo czas był z dokładnością do jednej sekundy, stąd też TIME_STEP ustawiony na 1 dawał jeden update logiki na sekundę, czyli trochę zbyt wolno.

Jasne, że możesz te milisekundy zamienić na sekundy, ale precyzja musi być do minimum milisekund, czyli możesz ten czas w tej funkcji podzielić przez 1000 i zwracać jako float. Chodzi tylko i wyłącznie o dokładność tego czasu i zgodność jednostek.

3
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 17:16:54 »
Operuje na milisekundach. Nie musisz zamieniać na floaty, gdyż precyzja do milisekundy jest (przynajmniej według mnie) w tym przypadku w zupełności wystarczająca, czyli przy wyliczaniu czasu w milisekundach możemy kompletnie olać część po przecinku.

4
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 16:10:15 »
Szczerze powiedziawszy to nie wiem. Nie analizowałem całego kodu, może po jej ustawieniu jeszcze gdzieś ta wartość jest modyfikowana? Upewnij się też, że dobre wartości tam przypisujesz. Czasami człowiek odejmie coś zamiast dodać i wychodzą tego typu kwiatki.

5
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 16:00:46 »
Sorry za nieogar, jestem po nieprzespanej nocy, ale ja tam nie widzę w ogóle, żebyś ustawiał jej pozycję y.

6
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 15:51:20 »
Spróbuj w GetCurrentTime() dać tam takie coś:
curtime = (tv.tv_sec) * 1000 + (tv.tv_usec) / 1000;

Nie wiem czemu byłem święcie przekonany, że w tv.tv_sec siedzi czas od początku z precyzją do sekund, a w tv.tv_usec siedzi też czas od początku tylko z inną precyzją. Tu się okazuje, że obie te wartości definiują czas.

7
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 15:39:42 »
Wyświetlanie wartości. Jeśli do konsoli nie da rady, to do pliku. Chociaż mnie to wygląda na to, że float nie udźwignął czasu w mikrosekundach. Spróbuj zmienić te typy najpierw.

8
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 15:31:38 »
Tu może być coś z zakresami zmiennych. Do GetCurrentTime daj curtime=(tv.tv_usec/1000) jeśli dałeś bez /1000. Zamień dt, currTime i lastTime na inty i powinno działać. Jeśli nie, to spróbuj z longami zamiast intów. Jeśli to też nie pomoże, to zrób sobie logowanie w konsoli zmiennych (głównie dt nas obchodzi) i zobacz jak sie zmienia, powinno rosnąć do TIME_STEP i po przekroczeniu lądować w okolicach zera.

9
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 15:22:44 »
Zainicjuj dt zerem (dt = 0) przed pętlą, może tu jest błąd. Co do warninga to szczerze powiedziawszy nie wiem o co się pluje, ale ja warningami się nie przejmuję póki wszystko działa (chociaż takiego pierwszy raz na oczy widzę). :P

10
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 15:15:03 »
Spróbuj tak, powinno zwracać czas w milisekundach.
time_t GetCurrentTime(){
  time_t curtime;
  struct timeval tv;
  struct game_data *gd;
   
  gettimeofday(&tv, NULL);
  curtime=(tv.tv_usec/1000);

  return curtime;
}

EDIT: I TIME_STEP zmień na 50. Lub wywal po prostu te "/1000" z tego kodu.

11
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 14:49:54 »
mikrosekunda to 0.000 001 sekundy, milisekunda to 0.001 sekundy. Innymi słowy 1 milisekunda to 1000 mikrosekund. Najprościej będzie Ci TIME_STEP trzymać jako mikrosekundy, czyli jak chcesz mieć go na 50ms, to dajesz 50000.

12
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 14:41:25 »
Cytuj
gives the number of seconds and microseconds since the Epoch
Nada się, ale musisz wziąć pod uwagę, że czas będzie w mikrosekundach (ten w sekundach niewiele Ci da). Jak potraktujesz je jako milisekundy to będzie Ci działało tak jakbyś nie sprawdzał tego czasu w ogóle. :P

13
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 14:28:27 »
Poszukaj funkcji która zwróci Ci czas w milisekundach i użyj tej funkcji. Sekundy to zbyt mała precyzja, by robić na niej logikę gry. Chyba, że zwraca to jako liczbe zmiennoprzecinkową (float czy double) - wtedy może być w sekundach. No i TIME_STEP zmień na jakiś czas w milisekundach, dobrany eksperymentalnie.

14
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 14:22:31 »
W jakich jednostkach GetCurrentTime() zwraca ten czas? I na pewno zwraca int?

15
Szkółka / Odp: Predkosc pilki w grze.
« dnia: Wrzesień 16, 2015, 14:10:55 »
Dorzuć ten fragment na start pętli:
currTime = GetCurrentTime();
dt += currTime - lastTime;
lastTime = currTime;
I w tym ifie (dt>=TIME_STEP) zamiast dt = 0 rob dt -= TIME_STEP;
Oczywiście po dodaniu tego framgentu wywal dt += GetCurrentTime(); z końca pętli.
Pamiętaj też, by przed pętlą przypisać do lastTime GetCurrentTime().
Tak powinno działać, chociaż mógł mi sie jakiś błąd wkraść.

W ten sposób logika będzie odpalała się raz na TIME_STEP, przy czym może czasem lekko przymulić, chociaż średnio będzie to raz co ten TIME_STEP. Jakbyś zerował dt, to w przypadku większej zamuły (np. trzykrotnie dłuższej niż TIME_STEP wetnie Ci te 3 klatki, a tak logika sobie nadgoni).

Strony: [1] 2