Autor Wątek: Robienie gry na demku z Bullet'a  (Przeczytany 2762 razy)

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Wrzesień 25, 2010, 16:21:46
btRaycastVehicle*   m_vehicle; ok wychodzi na to ze jest to class z bulleta chyba ze sie myle to mnie poprawcie w takim razie najpawdopodobniej wina braku delty; ale wez sie upewnij czy to nie jest jakas klasa stowrzona z interfejsu :)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 16:24:02
Nie, nie jest zrobiona z interfacu, więc, 3 prośby:
1. Wytłumacz mi co to jest to Delta
2. Jak to działa
3. Jak to zmodyfikować kod, żeby działało
Wielkie THX z góry

Offline Xirdus

  • Redaktor

# Wrzesień 25, 2010, 16:51:47
1. delta time to różnica między czasem (tzn. momentami w czasie) renderowania dwóch klatek.
2. Im większa delta time, tym dłuższe są ruchy (np. jeśli prędkość to 1m/s, a dt=30ms, to ruch w danej klatce to 3cm, a jak dt=40ms, to przy tej samej prędkości ruch jest 4cm - powoduje to, że niezależnie od FPSów, ruch jest zawsze 1m w każdej sekundzie).
« Ostatnia zmiana: Wrzesień 25, 2010, 16:53:26 wysłana przez Xirdus »

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 17:10:54
Ok. Ale to pomoże z tym, że koła wolno skręcają. A co z tym, że koła nie wracają to pierwotnej pozycji? A co do DT, to możesz mi pomóc dodać dt do tego demka?
EDIT. Co do tego że koła nie wracają do pierwotnej pozycji, to coś takiego trzaba by było zastosować
If (lewa strzałka.niewciśnięta)
   Koło.LewePrzednie.Obrót = 0 //lub -||- = domyślna.pozycja
   Koło.PrawePrzednie.Obrót = 0 //lub -||- = domyślna.pozycja


Oczywiście nie patrzcie na to że jest źle to up - teraz trzeba przetłumaczyć to na c++
« Ostatnia zmiana: Wrzesień 25, 2010, 17:43:22 wysłana przez xardas97260 »

Offline Xirdus

  • Redaktor

# Wrzesień 25, 2010, 18:29:26
Nie, nie zeruj kół (tak po prostu). Zrób coś takiego:
if (lewaStrzalka.wcisnieta)
{
    kolo.obrot -= Obrot;
    if (kolo.obrot <= 0 - MaxObrot) kolo.obrot = 0 - MaxObrot;
}
if (prawaStrzalka.wcisnieta)
{
    kolo.obrot += Obrot;
    if (kolo.obrot >= MaxObrot) kolo.obrot = MaxObrot;
}
if (!lewaStrzalka.wcisnieta && !prawaStrzalka.wcisnieta)
{
    if (kolo.obrot < 0)
    {
        if (kolo.obrot + Obrot / 2 > 0) kolo.obrot = 0;
        else kolo.obrot += Obrot / 2;
    }
    if (kolo.obrot > 0)
    {
        if (kolo.obrot - Obrot / 2 < 0) kolo.obrot = 0;
        else kolo.obrot -= Obrot / 2;
    }
}

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 18:35:06
Aha. No to nad tym posiedzę, i napiszę co mi wyszło ;)

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 18:48:36
Nie idzie mi.. zawsze kompilator wywala błąd. Czy możesz to napisać w c++? Bardzo Cię proszę

Offline Xirdus

  • Redaktor

# Wrzesień 25, 2010, 18:52:30
...to było C++. Z tym, że Strzalka.wcisnieta, kolo.obrot, Obrot i MaxObrot to były słowa zastępcze dla odpowiednio: sprawdzenie klawisza, aktualny obrót koła, jednostkowy obrót koła i maksymalny obrót koła. Taki ogólny kod, który musisz przerobić i wstawić w odpowiednie miejsce. Jak to zrobić to ci nie powiem, bo po pierwsze nie znam się na Bullecie, a po drugie to twój kod :) .

Offline xardas97260

  • Użytkownik

# Wrzesień 25, 2010, 19:03:10
No tak... dobrze, ja na dzisaj ide już od pc, ale jeszcze nad tym pomyślę, jutro napiszę co mi wyszło

Offline .:NOXY:.

  • Użytkownik
    • Profil

# Wrzesień 26, 2010, 12:40:15
Ja bym to zrobil tak wtedy kola sie prostuja automatycznie ;) i plynnie wg delty

Kod: (cpp) [Zaznacz]
if (steering > 0) {
_steeringWheelState -= abs(steering) * delta;
} else if(steering < 0){
_steeringWheelState += abs(steering) * delta;
}
else if( steering == 0){
_steeringWheelState -= sign(_steeringWheelState) * delta;
  if( fabs( _steeringWheelState ) < 0.06 )
_steeringWheelState = 0;
}

_steeringWheelState = clamp(_steeringWheelState, _steeringMaxAngleRad, -_steeringMaxAngleRad);



gdzie steering ustawiam w KeyDown i jest albo -1 albo 1 :)