Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro, C++] Kolizje

Ostatnio zmodyfikowano 2011-09-21 21:41
Autor Wiadomość
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ś.
P-40977
Wrzochu
Temat założony przez niniejszego użytkownika
» 2011-09-14 22:49:22
Rzeczywiście w  tej pętli:
C/C++
for( int i = 0; i < ENEMY_NUMBER; ++i ) /* petla ktora ustawia i rysuje przeciwnikow*/
{
    sam[ i ].ustaw_poz();
    sam[ i ].rys_sam();
};
 nie potrzebne jest ładowanie grafiki ale tutaj:

C/C++
for( int i = 0; i < ENEMY_NUMBER; ++i ) /* petla ktora ustawia i rysuje przeciwnikow*/
{
    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...
P-40986
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:
C/C++
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.
P-40999
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.
P-41020
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.
P-41050
malan
» 2011-09-21 21:41:36
To zapewne zwykły przypadek. Wypisz sobie wartości zmiennych i sam zobacz.
P-41254
1 2 « 3 »
Poprzednia strona Strona 3 z 3