[Allegro, C++] Kolizje
Ostatnio zmodyfikowano 2011-09-21 21:41
malan |
» 2011-09-14 19:56:30 Rozmawiacie o kolizji, a kolega co obieg pętli ładuje do pamięci (45 razy) tą samą bitmapę. Najpierw ogarnij ten kod - przemyśl co chcesz zrobić, bo jeszcze chwila i utkniesz. Poza tym - po co (w pętli) wywołujesz metodę cAuto::kolizja skoro jest ona wywoływana w cAuto::przemiesc_auto? Po co średniki po for? Po co zmienne globalne? Eh. Źle to zaprojektowałeś. |
|
Wrzochu Temat założony przez niniejszego użytkownika |
» 2011-09-14 22:49:22 Rzeczywiście w tej pętli: for( int i = 0; i < ENEMY_NUMBER; ++i ) { sam[ i ].ustaw_poz(); sam[ i ].rys_sam(); };
nie potrzebne jest ładowanie grafiki ale tutaj: for( int i = 0; i < ENEMY_NUMBER; ++i ) { sam[ i ].kolizja(); sam[ i ].przemiesc_sam(); };
już raczej jest nieuniknione znaczy jest ona wywołana w cAuto::przemiesc_auto, tak samo niepotrzebnie wywołuje tu kolizje a robiłem tak bo próbowałem już na wszystkie sposoby jakie mi wpadły do głowy aby tylko działało... Natomiast średniki po pętli for były moim przeoczeniem(czyt. kiepskim poziomem mojego programowania). Ale myślę, że i tak przepełniam gdzieś pamięć bo jak tworze po 45 - 60 obiektów wszystko działa ale jak więcej zaczyna się wieszać... No i niestety kolizja nie działa nawet dla 10 obiektów... |
|
Wrzochu Temat założony przez niniejszego użytkownika |
» 2011-09-15 10:48:17 Wracając do kolizji to jak zrobiłem taką pętle: for( int i = 0; i < ENEMY_NUMBER; i++ ) { for( int j = 0; j < ENEMY_NUMBER; j++ ) { sam[ i ].x2 = sam[ j ].x; sam[ i ].y2 = sam[ j ].y; } }
To sprawdza kolizje ale tylko dla jednego auta tzn. tylko jedno auto wykrywa na swojej drodze inne samochody. |
|
malan |
» 2011-09-15 16:26:41 Powiedzmy, że w ciągu sekundy pętla wykona się 5 razy. 5 razy wczytujesz 45 tych samych bitmap - co, w sumie daje nam 225 bitmap w ciągu sekundy. Przez minutę (Twój program) w czyta tą samą bitmapę 13500 razy. Chyba się gdzieś pomyliłem, bo nie wierzę, że to aż takie liczby....
Kolizja nie działa, bo zapewne robisz coś źle... Hm... Chwileczkę... Czy ja dobrze widzę? Przecież Ty nigdzie nie inicjalizujesz zmiennych odpowiedzialnych za pozycje (x2, y2). Zresztą to jest i tak źle. Przeczytaj dokładnie tutorial na stronie easykodera - zwróć uwagę na to, czym są zmienne x2, y2. |
|
Wrzochu Temat założony przez niniejszego użytkownika |
» 2011-09-16 11:57:58 W tej jednej pętli nie potrzebnie to wyświetlałem, ale jeżeli auto się przesuwa to nie musi być bitmapa wyświetlana ponownie? Wydaje mi się, że musi. A w kolizji tak jak napisałeś na pewno robię coś źle.. Tylko dziwi mnie dlaczego teraz tak jak jest działa dla niektórych aut ale nie dla wszystkich. |
|
malan |
» 2011-09-21 21:41:36 To zapewne zwykły przypadek. Wypisz sobie wartości zmiennych i sam zobacz. |
|
1 2 « 3 » |