Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Projektowanie]Renderowanie obiektów w płaskim świecie
daniel1302
post 28.11.2012, 17:11:24
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Witam, dostałem zlecenie zaprojektowania gry 2d(w Canvas/JS) gry która może być rozbudowana, więc pomyślałem, że napisze silnik który będę mógł wykorzystać w innych projektach, jako, że Canvas ostatnio staje się coraz popularniejszy.

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:

  1. windowContext.drawImage(
  2. for (oId in objects)
  3. {
  4. obj = objects[oId];
  5. textures[obj.get('texture')],
  6. obj.get('sx'),
  7. obj.get('sy'),
  8. obj.get('swidth'),
  9. obj.get('sheight'),
  10. obj.get('dx'),
  11. obj.get('dy'),
  12. obj.get('dwidth'),
  13. obj.get('dheight')
  14. );//Rysuj obiekt
  15. }

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:
  1. 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> )
  2. 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.
Go to the top of the page
+Quote Post
sazian
post 28.11.2012, 19:10:32
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


Witam,
poczytaj artykuły na tej stronie http://www.unit1.pl/224,idx
powinny cię zainteresować artykuły z serii "Wędrowanie w świecie 2D", "Giganty świata 2D" oraz być może "Góry i doliny świata 2D".
Tak wiem że to zupełnie inny język i inna technologia ale chodzi samą "ideje" i teorie która dla js będzie bardzo podobna
Go to the top of the page
+Quote Post
daniel1302
post 30.11.2012, 06:37:38
Post #3





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Dziękuje za linka przeglądnąłem z grubsza te artykuły i bardzo ciekawe, Jeśli ktoś znajdzie temat to dorzucam swoje:

http://lazyfoo.net/SDL_tutorials/index.php
http://informatyka.wroc.pl/


Te strony są naprawdę godne polecenia, całą wiedzę o tworzeniu gier zdobyłem z nich.


Jeśli ktoś miałby inne godne polecenia strony to proszę o podanie.
Go to the top of the page
+Quote Post
redeemer
post 30.11.2012, 10:52:08
Post #4





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

Ostrzeżenie: (0%)
-----


http://warsztat.gd/ (pl)
http://www.gamedev.pl/ (pl)

http://www.gamasutra.com/ (en)
http://www.gamedev.net/ (en)


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 13:44