Zrobiłem już trochę ale mam problem:
Gra jest uruchomiona w pętli(pętla uruchamia się z częstotliwością 8-64 Hz, zależnie od tego jak ustawimy.
Aktualnie przy odświeżeniu przerysowuję wszystko. I tutaj pojawia się moje pytanie.
Funkcja odpowiadająca za przerysowanie wygląda mniej więcej tak:
windowContext.drawImage( for (oId in objects) { obj = objects[oId]; textures[obj.get('texture')], obj.get('sx'), obj.get('sy'), obj.get('swidth'), obj.get('sheight'), obj.get('dx'), obj.get('dy'), obj.get('dwidth'), obj.get('dheight') );//Rysuj obiekt }
i wykonuje sie ona 2^n razy na sekundę z przedziału od 8-64.
Aktualnie przerysowywane są wszystkie obiekty narazie jest ich około 200(prosty świat i bohater który może się poruszać[tylko poruszać]), ale co jeśli będzie ich 5000 przy dużym świecie, wtedy zajdzie potrzeba filtrowania który obiekt jest na ekranie.
I tutaj pytanie jak to zrobić? Myślałem nad czymś takim:
PSEUDO KOD:
JEŚLI (OBIEKT.X należy do <POŁOZENIE_EKRANU.X-200; POŁOZENIE_EKRANU.X+200> LUB OBIEKT.Y należy do <POŁOZENIE_EKRANU.Y-100; POŁOZENIE_EKRANU.Y+100> ) RYSUJ OBIEKT
I co z kolizjami. Nie chodzi mi o to jak sprawdzać kolizje bo zaimplementowałem 2 podstawowe algorytmy(Przybliżenie kołem i przybliżenie prostokątem). Jednak mam wachanie kiedy sprawdzać kolizje.
Do sprawdzania kolizji mam funkcję:
collision_id = DefineCollisionTest(Obiekt1, Obiekt2, Options)
i umożliwiłem zdefiniowanie kolizji pomiędzy obiektem1 a obiektem2, dodatkowo mogę zdefiniować do jakiej grupy ma należeć dany obiekt. I tym samym w pętli sprawdzam przy renderowaniu czy wystąpiła kolizja i wykonuje jakiś kod. który definiuje sobie(w sumie to nie myślałem gdzie) ale np w collision_id.callback;
1) Przy przerysowaniu dla aktualnie renderowanych obiektów wtedy sprawdzam raz w pętli.
2) Przy Updacie obiektu(sprawdzam raz dla obiektu ale daje mi to pewność, że gdy np kolizja wystąpi z obiektem 12021 a ja sprawdzam w tym czasie już kilka obiektów dalej. to zwróci kolizje natychmiast. Ale to jest kilka, kilkanaście pętli dodatkowych sprawdzających to samo co podczas rysowania(tylko nie rysujących), a znowu nawet 15fps nie powinno pozwolić na spostrzeżenie błędów.