Ograniczenie obszaru gry SFML

0

witam,

mam wyrenderowane okno, oraz sprajta, którym moge sterować po całym oknie, i który wychodzi mi po za nie. przeszukałem całe polskie google, oraz angielskie i nigdzie nie piszą o ograniczaniu pola, tylko o przybliżeniu, kamerze, itd. jedyne co znalazłem to to :

http://cpp0x.pl/kursy/Kurs-SFML-1-6-C++/Ograniczanie-obszaru-modyfikowania-sceny/409

jednak ja używam nowszej wersji, 2.0.

Proste ograniczenie ruchów sprita do wyznaczonego obszaru, i chciałbym też potem wydzielić po prawej stronie szybkie menu itd, lub nie, ale to nie istotne. Jak to zrobic w 2.0? tak jak w linku wyzej, czy w wersji 2.0 są już odpowiednie komendy na to?

0

Hm, tak najprościej.
Możesz sworzyć sobie RectangleShape który będzie definiował obszar w którym sprajt(sprajt to będzie drugi rectangle) nie może sie poruszać, i w pętli sprawdzać kolizje.
Jeśli sprite(x+0.1) spowoduje kolizje(czyli dodanie x/y spowodowałoby kolizje z naszym prostokątem) nie przesuwaj sprita, w przeciwnym wypadku przesuń.
// Edit
Jej, pomyliło mi sie, musi być dokładnie odwrotnie z tym intersect().
Generalnie chodzi o to żebyś PRZED poruszeniem sprawdził przecięcie.

0

czyli wczytać teksture odpowiadająca tłu pola gry i sprawdzać czy zachodzi kolizja przy brzegach ? w sensie że jeden sprajt porusza się po drugim?

0

To jest logika gry, dla wersji tekstowej czy hologramowej walidacja ruchu będzie wyglądać tak samo.

0

tak, na poczatku chciałbym żeby nie wychodził poza ekran, a potem chciałbym zmiejszyć mu rozmiar pola gry i zobaczył które rozwiązanie było by lepsze

0

No to w takim razie przecięcia to armata na muche troche.
sprawdzaj w pętli po prostu przed przesunięciem sprita, czy jego pozycja z poprawką(czyli zwiększona o np 0.1) będzie wychodziła poza ramy okna.
I analogicznie dla x,y, oraz 4 krawędzi

#define MAX_X 800
bool move_possible(float spritex,float spritey){
if((unsigned int)spritex >= MAX_X) return false;
else return true;
}
// taki example - wiem, hurr durr brzydkie

Taki przykładzik załączam, rzutowanie jest konieczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1