Skocz do zawartości

[c++]Kolizja w allegro. Mapa kafelkowa


Rekomendowane odpowiedzi

Opublikowano

Witam, stworzyłem sobie mapę kafelkową i teraz chciałem dodać poruszającego się ludka, ale nie mam pojęcia jak zrobić kolizje... Znaczy wiem jak zrobic taką prosta na zasadzie if(ludek_x == sciana_x) itp.

Ale chciałem zrobic takie coś na mapie kafelkowej a nie chce do każdego obiektu na drodze ludka robić osobnej kolizji...

 

Chciałem zrobić to za pomocą funkcji: getpixel(...) ale nie wiem jaki podać tam kolor. Bo jak podam kolor bufora to ludek np. cały czas spada nawet jak napotka jakąś przeszkodę...

 

Proszę o szybką odpowiedź.

Opublikowano

Niby tak. Ale co bym mial wpisac w miejsce 'objekt' bo jak mam te objekty z mapy kafelkowej podzielone np. Na 4 czesci i po poloczeniu odpiwiednich kafelk ukazyje sie naszym oczą objekt.

Opublikowano

Jeśli mapa kafelkowa oznacza pojęcie tablicy 2d z wartością reprezentującą typ obiektu (np. 0 nic, 1 kolizja), to sposób jest prosty. Jeżeli każda z kafelek ma np. 16x16 pikseli, to x=floor(gracz_x/16) i otrzymujesz indeks (w tym przypadku poziomy) tablicy. Podobnie robisz z y, i otrzymujesz w ten sposób adres do komórki będącej "w" pozycji gracza. W taki sam sposób możemy sprawdzić co jest pod nim (dodajemy do y wartość 1), po lewo (x - 1), w prawo (x + 1), gdzieś (x + 3, y - 15), itd.

 

Skracając:

x = floor(gracz_x / 16);

y = floor(gracz_y / 16);

if tablica[x, y + 1] = 1 to znaczy że mamy coś pod sobą, na czym można stać (1 oznacza że komórka jest, em.. "twarda").

 

Grunt to "przerobienie" pozycji gostka na pozycję w tablicy.

  • Administratorzy
Opublikowano

Skoro znasz x i y, to możesz podzielić bez reszty przez szerokość kratki i masz indeks tablicy.

Opublikowano

Ale co podzielić i przez co? x i y ludka?

Wolałbym tym sposobem co podałem w moim przez ostatnim poście (http://www.easykoder.vot.pl/arty/wormsowamapa ) tylko jak tak próbowałem zrobic to albo mam cały czarny ekran albo wyświetla mi normalnie moją mapke kafelkową i nic więcej

 

 

EDIT:

 

Exigo: w tym sposobie co wymieniłeś muszę wziąć tablicę tą co posiada mape czy zrobić nową na x,y??

Opublikowano

Najpierw określ się, czym jest dla ciebie mapa. Bo tak chaotycznie piszesz że już sam nie wiem co tam masz. Jeśli masz mapę w postaci tablicy, to czy:

a ) wartości jakie przyjmuje to 0 (jest to pusty "blok"), czy 1 - (kolidujący blok).

b ) wartości masz takie, aby obsługiwać jakiegoś tileseta (tzn. liczba reprezentuje grafikę którą chcesz rysować), czyli 0 - nic, 1 - trawa, 2 - kamienny blok, 3 - woda, etc. i potem na podstawie tego z czym mamy do czynienia dostosowujemy odpowiednie zachowania postaci, np. spadamy w dół, odbijamy się, pływamy, etc.

???

Opublikowano

Tylko, że ja mam pod 0 jakiś kafelek i tak aż do 15 (bo z tylu kafelków składa się nasza bitmapa) i jak chcce wyświetlić jakiś pusty kafelek to muszę wpisać więcej niż 15. I jakbyś mógł to wytłumacz mi dokładnie jak sprawdzić w jakim kafelku znajduje się nasz ludek.

Opublikowano

Ok, w takim razie zakładamy że masz tablicę w której trzymasz mapę, tak?

Dobra, tak opisowo:

 

Tak wyglądają nasze dane:

int x = 256, y =256, gracz_x = 33, gracz_y = 79, x2, y2, rozmiar_kafelki = 15;

int mapa[x][y] = {0}; (0 oznacza nic)

 

Teraz musisz przypisać komórkom jakieś wartości. Nie wiem jak to robisz, czy wczytujesz to jakoś z tekstu, czy bitmapy, może generujesz, nie wiem. Wszystko jedno. Zakładamy że w tej tablicy masz opisaną mapę. ; )

 

x2 = floor(gracz_x/rozmiar_kafelki); (czyli gracz jest np. na pozycji 215, to po przekształceniu 14,3333, co daje 14 - indeks komórki)

y2 = floor(gracz_y/rozmiar_kafelki);

 

I w ten sposób, liczby x2 i y2 to adres do komórki, która jest "na graczu". Na podstawie tego pobierasz sobie wartość, i liczysz kolizję na prawach fizyki jakie sobie tam wymyślisz. Komórka "pod graczem" to k = mapa[x2, y2 + 1];

Opublikowano

Okey zrobiłem tak jak podałeś i dałem sobię, żeby wyświetlało tak dla testu "numer kafelki..." i działa nawet dobrze ale nie o to mi chodziło ;d BO teraz jak poruszam się moim ludkiem po kafelce to co kafelka do mi dodaje 1... czyli jestem na kafelce ruszę się i numer kafelki zmienia się na 1 jeszcze dalej i mam 2 itp. A mi chodziło o to, żeby jak są te same kafelki żeby one miały ten są numer np.3

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...