SDL fizyka(odbicie)

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Mateusz_93
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 19 lut 2009, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Architektura: x86_64

SDL fizyka(odbicie)

Post autor: Mateusz_93 »

Witam! Na początek chcę powiedzieć, że ogólnie to mam to zrobione, tylko chcę to poprawić. Jak zapewne wiecie w każdej klatce dodaje się do prędkości pionowej stałą grawitacji, żeby "przedmioty" mogły spadać. Odbicie zrobiłem w ten sposób, że gdy wykrywam kolizję zamieniam znaki prędkości pionowej(może trochę niezrozumiałe, już kod:p).

Kod: Zaznacz cały

if(wykrywanie kolizji)
yVel=-yVel;
Mój problem polega na tym, że do czasu, kiedy przedmiot spadnie na sam dół "yVel" zdąży wzrosnąć tak, że wygląda to tak, jakby piłka odbijała się od powietrza 2cm nad podłożem. Chciałbym, żeby odbijała się od podłoża i nie wiem jak to zrobić, bo próbowałem kilku pomysłów, ale wszystkie zawiodły:(. Proszę o pomoc i z góry dziękuję!
Awatar użytkownika
3miel
Wytworny Kaczor
Wytworny Kaczor
Posty: 311
Rejestracja: 19 kwie 2006, 18:51
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: SDL fizyka(odbicie)

Post autor: 3miel »

Mateusz_93 pisze:bo próbowałem kilku pomysłów, ale wszystkie zawiodły
napisz czego próbowałeś bo zaraz wyjdzie że każda pomoc na która ktoś wpadnie była sprawdzona i nieefektywna, ja bym dodał lub odjął promień piłki, ale to chyba w warunku na kolizje.
compal: fl92 gf8600gt m 512mb 1680x1050 - t9300@2500 - 200gb 7200rpm - 2gb+1gb 667 - 4965abg - bt - a4tech xl 750f
mikolajs
Wytworny Kaczor
Wytworny Kaczor
Posty: 352
Rejestracja: 15 paź 2008, 18:30
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: KDE Plasma

Odp: SDL fizyka(odbicie)

Post autor: mikolajs »

Poza tym co napisał 3miel, pewnie musisz zsynchronizować wyświetlanie tak, aby była rysowana klatka w momencie odbicia od podłoża (czyli wyświetlać przedmiot na dole w pozycji styku z ziemią po wykryciu kolizji)
Mateusz_93
Piegowaty Guziec
Piegowaty Guziec
Posty: 9
Rejestracja: 19 lut 2009, 16:58
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: SDL fizyka(odbicie)

Post autor: Mateusz_93 »

Próbowałem dodać do współrzędnej odległość, jaka została między podłożem a piłką.

Kod: Zaznacz cały

 if((y<0) || (y+h>600))
  {
    y-=yVel;
//tutaj:
    y+=(600-(Position.y+Position.h));
    yVel=-yVel;
  }
Position to SDL_Rect zawierający współrzędne piłki. Jednak po zastosowaniu tego piłka raz się odbija(od samego podłoża:)), ale zbyt wysoko i nagle pojawia się nisko i zyskuje na wysokości przy każdym następnym podskoku i znowu dociera do samej góry i pojawia się na dole. "Różne sposoby" polegały na zmianie tej linijki kodu.Np dodawanie innych wartości, zamiana + na - albo zamiana y na yVel. Może trochę nieczytelnie piszę, ale trudno to wytłumaczyć pisząc:/
Ps. y nigdy nie jest mniejsze od 0 w moim programie, a 600 to wysokość okna.
@mikolajs- racja, ale możliwe, że piłka nigdy nie styka się bezpośrednio z podłożem, bo prędkość tak wzrośnie, że piłka będzie "wchodzić" w podłoże. W moim programie odejmuję wtedy od położenia prędkość(y-=yVel).
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości