BaaTooN Opublikowano 19 Grudnia 2011 Udostępnij Opublikowano 19 Grudnia 2011 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ź. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 19 Grudnia 2011 Udostępnij Opublikowano 19 Grudnia 2011 Nie znam się na allegro ale ja bym zrobił sobie funkcje sprawdz_kolizje(obiekt) i tyle. Najprostsze rozwiązanie jak dla mnie ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 19 Grudnia 2011 Udostępnij Opublikowano 19 Grudnia 2011 skoro nie wiem jak wykryć kolizje to jak ma napisac funkcje? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
BaaTooN Opublikowano 19 Grudnia 2011 Autor Udostępnij Opublikowano 19 Grudnia 2011 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 19 Grudnia 2011 Udostępnij Opublikowano 19 Grudnia 2011 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
BaaTooN Opublikowano 20 Grudnia 2011 Autor Udostępnij Opublikowano 20 Grudnia 2011 Właśnie o to mi chodzi, że jeżeli ludek dotyka obiektu to kolizja wynosi 1 a jeżeli nie dotyka to 0. Tylko nie wiem jak odczytaj w jakiej pozycji znajduje się aktualnie ludek na tablicy... PS: a nie dało by rady zrobić tego w ten sposób: http://www.easykoder.vot.pl/arty/wormsowamapa tylko, że tam jest zwykła mapka a ja mam kafelkową... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Grudnia 2011 Administratorzy Udostępnij Opublikowano 20 Grudnia 2011 Skoro znasz x i y, to możesz podzielić bez reszty przez szerokość kratki i masz indeks tablicy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
BaaTooN Opublikowano 20 Grudnia 2011 Autor Udostępnij Opublikowano 20 Grudnia 2011 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?? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 20 Grudnia 2011 Udostępnij Opublikowano 20 Grudnia 2011 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. ??? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
BaaTooN Opublikowano 20 Grudnia 2011 Autor Udostępnij Opublikowano 20 Grudnia 2011 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Exigo Opublikowano 20 Grudnia 2011 Udostępnij Opublikowano 20 Grudnia 2011 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]; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
BaaTooN Opublikowano 20 Grudnia 2011 Autor Udostępnij Opublikowano 20 Grudnia 2011 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę