• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Otwarta mapa - SFML - teoria

VPS Starter Arubacloud
0 głosów
357 wizyt
pytanie zadane 25 września 2016 w C i C++ przez Gracjan Pasik Obywatel (1,810 p.)
Cześć, mam pytanie natury czysto teoretycznej.

Chcę zrobić dosyć dużą grę 2D. Wykorzystam do tego SFML, ponieważ znam go najlepiej i z tego co wiem jest obecnie najlepszy jeżeli chodzi o gry 2D w C++.

Chciałbym, aby gra była bardzo wydajna, jednak zanim zacznę kodować pierwsze linie muszę wszystko dobrze zaplanować. Tutaj mam problem z mapą, ponieważ chcę aby była otwarta, więc co za tym idzie bardzo duża. Nie wiem teraz czy powinienem standardowo wyrenderować całą na raz (co wydaje mi się kiepskim pomysłem, bo zajęłoby to bardzo dużo czasu i zasobów), czy jest jakiś sposób aby renderować tylko fragment, ten który jest najbliżej (a może twórcy SFML to przewidzieli i dzieje się tak automatycznie?).

Mam nadzieję, że ktoś z was zna odpowiedź :)

2 odpowiedzi

+1 głos
odpowiedź 25 września 2016 przez Dash Nałogowiec (29,650 p.)

Robiłem kiedyś coś takiego, mapa była ogromna i rozwiązałem to tak: 

Najpierw dzielisz mapę na chunki. Jeden chunk powinien być wielkości obszaru który wyświetla twoje view. Jeżeli masz mapę 6000x4000, a wyświetlasz na raz obszar o rozmiarze 600x400, mapa może składać się ze 100 chunków. 

Na raz wyświetlasz tylko 9 chunków(X), ten na którym stoi gracz(0) i po jednym w każdą stronę (lewo, prawo, góra, dół, skosy). Klasa chunk ma funkcję draw, który rysuje ten konkretny skrawek mapy. (ASCII nr1). 

Gdy gracz przejdzie na sąsiedni chunk (ASCII 2), usuwasz trzy najdalsze chunki (U) i doczytujesz kolejny kawałek drogi dla postaci tworząc trzy nowe chunki (D). W taki sposób możesz streamować mapę z pliku, i nigdy nie będziesz rysować więcej niż 9 chunków terenu. 

XXX  UXXD  
X0X  UX0D
XXX  UXXD  

 

 

0 głosów
odpowiedź 25 września 2016 przez katolik6 Dyskutant (8,140 p.)
Nie wiem, czy to przewidzieli, ale dałoby się sprawdzić. A co do własnoręcznej implementacji: Jak ta mapa ma być zrobiona? Coś jak rimworld, czy darkwood, czy jeszcze inaczej?
komentarz 25 września 2016 przez katolik6 Dyskutant (8,140 p.)
Sprawdzić, czy obiekt jest na ekranie jest łatwo, tylko musisz tą mapę podzielić na mniejsze elementy. A potem if((element.getPosition().x+element.getGlobalBounds().width>0)&&(/*itd*/)) window.draw(element);
komentarz 25 września 2016 przez katolik6 Dyskutant (8,140 p.)
Najwydajniej będzie robić ją z elementów tej samej wielkości, bo będziesz mógł podmienić element.getGlobalBounds().width na stałą wartość ewentualnie *k jeśli chcesz ją skalować.

Podobne pytania

0 głosów
5 odpowiedzi 635 wizyt
pytanie zadane 28 kwietnia 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)
0 głosów
0 odpowiedzi 204 wizyt
pytanie zadane 30 lipca 2018 w C i C++ przez HitMan Użytkownik (850 p.)
0 głosów
2 odpowiedzi 630 wizyt
pytanie zadane 17 kwietnia 2017 w C i C++ przez fatalFOx Początkujący (300 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...