Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML] kamera, kolizja

Ostatnio zmodyfikowano 2020-03-28 01:40
Autor Wiadomość
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.
P-176543
pekfos
» 2020-03-27 20:06:57
Jak ustawić, aby kamera podążała za graczem?
https://www.sfml-dev.org​/tutorials/2.5/graphics-view.php

Jak mogę zrobić kolizje z np. ogrodzeniem?
Możesz na przykład wjechać w nie rowerem. Jeśli zależy Ci na jakimś bardziej konkretnym efekcie, to podaj szczegóły.
P-176544
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.
P-176545
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.
P-176546
R0ut4
Temat założony przez niniejszego użytkownika
» 2020-03-27 20:21:32
Chodzi ci o coś takiego?
C/C++
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?
P-176547
pekfos
» 2020-03-27 20:25:31
Wygląda jakbyś mógł zrobić po prostu
C/C++
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.
P-176548
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ć.
P-176549
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ć)
P-176550
« 1 » 2 3
  Strona 1 z 3 Następna strona