R0ut4 Temat założony przez niniejszego użytkownika |
[SFML] kamera, kolizja » 2020-03-27 19:00:15 Spodobało mi się to forum :D
Tym razem mam dwa pytania różne od siebie :/ (Pekfos nie bij)
1. Jak ustawić, aby kamera podążała za graczem? Próbowałem, ale mi się nie udaje. 2. Jak mogę zrobić kolizje z np. ogrodzeniem? Czytałem o kolizjach per-pixel i na zasadzie getGlobalBounds(), ale musiałbym każdą część ogrodzenia rysować i ustawiać jako osobny sprite, więc nie jest to zbyt optymalna metoda.
|
|
pekfos |
» 2020-03-27 20:06:57 |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2020-03-27 20:10:36 Właśnie czytałem na tej stronie odnośnie kamery, ale nie wiem jak mogę wykorzystać coś xd
Ha, ha, ha... Chodzi o kolizje sf::Sprite player/sf::Vertexarray player z jakąś częścią mapy. |
|
pekfos |
» 2020-03-27 20:17:17 Jest tam napisane jak poruszać kamerą i wycentrować ją na jakimś punkcie. Proponuję wycentrować kamerę na pozycji gracza. Ha, ha, ha... Chodzi o kolizje sf::Sprite player/sf::Vertexarray player z jakąś częścią mapy. |
Kolizje nie wynikają ze sposobu rysowania. Kolizje i rysowanie wynikają z jakiegoś modelu mapy i o niego pytam. Jeśli nie wiesz jak jest zorganizowana Twoja mapa, to ja też nie wiem jakie jest odpowiednie rozwiązanie. Przykładowo gdy masz mapę widzianą z lotu ptaka, a na mapie masz drzewo, chcesz kolidować tylko z pniem drzewa, kołem po środku obrazu drzewa, a nie z całym obrazem drzewa. Wszystkie sposoby kolizji o jakich słyszałeś będą miały tu błędne zachowanie. |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2020-03-27 20:21:32 Chodzi ci o coś takiego? camera.setCenter( sf::Vector2f( player.getPosition().x, player.getPosition().y ) );
Mapa to jest coś takiego: https://www.szybkiplik.pl/download/cf9bf3d0a263b5f95671ea538f7f720c.html I jeszcze teraz tak naszło. Jak mogę się odnieść do jednego "kafelka"? Tzn. stoi gracz przy jednym polu na mapie, klika coś i tylko to jedno pole zmienia texture? |
|
pekfos |
» 2020-03-27 20:25:31 Wygląda jakbyś mógł zrobić po prostu camera.setCenter( player.getPosition() );
Może o to chodziło. To tylko wyrwany z kontekstu fragment, wciąż można wiele zepsuć. Działa..? Czyli mapa kafelkowa prostokątna. A jaka jest ruchomość gracza? Dozwolona jest dowolna pozycja gracza na mapie, czy tylko jak na szachownicy? W tym drugim wypadku musisz jakoś określić które kafle są kolidujące, a jakie nie. Jeśli chcesz wejść na kolidujący kafel, to po prostu tego nie rób i nagle magicznie nie możesz wejść na ogrodzenie. W przypadku dowolnych ruchów podobnie, tylko detekcja kolizji jest bardziej skomplikowana niż jeden prosty if. |
|
RazzorFlame |
» 2020-03-27 20:26:06 Nie traktuj całej mapy jak jedną wielką teksture, bo chyba tak właśnie robisz. Ułóż to z kafelków. Wtedy będziesz miał dwuwymiarową tablicę i będzie już łatwo to obliczyć. |
|
R0ut4 Temat założony przez niniejszego użytkownika |
» 2020-03-27 20:29:26 Pekfos, nie działa ten skrócony kod. Pozycja gracza jest dowolna, może stać tylko na jednym polu, a może na czterech.
RazzorFlame (czemu nie krótszy nick xd) Tylko wtedy chyba muszę zrobić mnóstwo spritów, nie? (nie wiem jak mógłbym wykorzystać tabllice dwuwymiarową - wstyd się przyznać) |
|
« 1 » 2 3 |