Autor Wątek: Wykrywanie kolizji pod pixele.  (Przeczytany 602 razy)

Offline Liptoner_1

  • Użytkownik

# Czerwiec 24, 2011, 18:08:25
Programowaniem gier zajmuje się bardzo krótki czas, i teraz chciałbym móc programować gry w których występuje ruch. Wiadomo, tam gdzie ruch są kolizje. Dlatego też chciałbym umieć odpowiednio je wykrywać.

Mam następujący pseudokod, który delte dzieli na kilka kawałków i na każdym z osobna przeprowadzone jest poruszanie obiektów, wykrycie ich kolizji, a następnie przeprowadzenie odpowiedniej reakcji. Gdy czas delty zostanie wykorzystany dana scena jest renderowana.

forever {
rest_time = delta;

process_event();

while ( rest_time > 0 ) {
if ( rest_time > limit ) {
current_time = limit;
rest_time -= limit;
}
else {
current_time = rest_time;
}

for each game_objects {
update_position();
}

for each game_objects {
check_collision();
}

for each game_objects {
reaction();
}
}

render();
}

O sukcesie wykrycia kolizji w tym sposobie zależy to jaki narzuce limit. Wiadome, im mniejszy tym większa szansa, że złapie obiekt na kolizji.

Po paru godzinach ten kod wydaje mi się podejrzany, bo nie zda tego testu:

Załóżmy, że z lewej do prawej strony ekranu, bardzo szybkim tempem porusza się czerwony pixel. Na jego drodze jest przeszkoda, pionowa kreska o grubosci 1 pixela. To, abym powyższym sposobem wykrył każdą taką kolizję graniczy z cudem. Musiałbym limit bardzo bardzo pomniejszyć.

Chciałbym wiedzieć, czy ktoś zna lepszy sposób rozwiązania tej sytuacji?

Offline Mr. Spam

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

Offline Oti

  • Użytkownik

# Czerwiec 24, 2011, 18:28:06
Kolizja typu odcinek-odcinek, lub odcinek-cośtam_innego. Zapamiętujesz pozycję obiektu z poprzedniej klatki i przy sprawdzaniu kolizji nie bierzesz tylko aktualnej pozycji, ale odcinek PrevPos-CurPos.

Offline Liptoner_1

  • Użytkownik

# Czerwiec 24, 2011, 18:54:47
Dzięki za jasne wytłumaczenie. Już wiem, jak dalej to pociągnąć.

Miłego dnia.