• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SFML - kilka pytań

Mały hosting, OGROMNE możliwości
0 głosów
670 wizyt
pytanie zadane 30 września 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
Hejka.
Dwa dni temu zacząłem się uczyć biblioteki do c++ SFML, już coś tam potrafię ale nie rozumiem następujących rzeczy oraz czy mógłby mi je ktoś wytłumaczyć:
1.Dlaczego jak kompiluje program z linkowaniem SFML dynamicznym natomiast linkowanie samego c++ daje statyczne to po odpaleniu na innym komputerze wyskakują errory o braku dll z vs c++ 2015.
2.Dzisiaj zamierzam zacząć pisać jakąś prostą gierkę gdzie użytkownik może strzelać, tak więc co zrobić ze strzałami które już uderzą w obiekt? Dać pozycję poza ekran a przy ponownym wystrzeleniu dać z powrotem pozycje do miejsca znajdowania się broni?
3.Jak w SFML zrobić by obiekt poza wyjście za ekran pojawił się po przeciwnej stronie ekranu?
4.Jak poruszyć obiektem w taki sposób że np. odbija się od rozmiarów okna?

Dodam, że próbowałem szukać w google, ale nic nie znalazłem (albo nie wiedziałem jak to wpisać), możecie nawet podać link (najlepiej po polsku ale po angielsku też może być) do którejś z odpowiedzi.
Pozdrawiam ;)

1 odpowiedź

+1 głos
odpowiedź 30 września 2016 przez niezalogowany
  1. Biblioteki linkowane statycznie są "wklejane" w plik wykonywalny, linkowane dynamicznie nie, a więc musisz je dostarczyć sam (pliki dll). To tak w skrócie. More: https://stackoverflow.com/questions/1993390/static-linking-vs-dynamic-linking
  2. Jest to jedno z możliwych rozwiązań i jest to dobry sposób na "niezmienne" zużycie pamięci. Zamiast zmieniać pozycję i martwić się o te obiekty przy zmianie pozycji kamery, to możesz równie dobrze zamienić ich teksturę na przezroczystą 
  3. jeżeli mówimy o sytuacji gdy cały obiekt wychodzi poza ekran, np poza prawą krawędź to po wykryciu takiej sytuacji zmieniasz jego pozycję na pozycję lewej krawędzi (pseudokod poniżej). W przypadku gdy wychodzi poza ekran jedynie fragmentem to potrzebujesz dwóch obiektów i odrobiny matematyki aby obie części były odpowiednio wysunięte
  4. Spróbuj wzorować się tym: https://github.com/SFML/SFML/wiki/Source:-Bouncing-ball (i gotowych przykładów jest pełno w sieci)
Vector2f pos = obj.getPosition();
Vecto2f size = obj.getSize();

/* psuedo struct
struct Camera {
  float left, right, up, bottom; // pozycja odpowiweniej krawędzi kamery
};
*/
if (pos.x + size.x > camera.right) // wychodzi poza prawą stronę
{
  pos.x = camera.left;
}

else ... // reszta sytuacji analogicznie

player.setPosition(pos);

 

komentarz 30 września 2016 przez Avernis Nałogowiec (27,400 p.)
2. nie lepiej jest użyć vectora i metody erase,i push back
komentarz 30 września 2016 przez niezalogowany
Czy lepiej? Zależy jak dużo masz obiektów na scenie, a zauważ też jak działa wektor (capacity != size)
komentarz 30 września 2016 przez L33TT12 Gaduła (3,950 p.)
Dzięki, na pewno przeanalizuje te przykłady, ale mam jeszcze jedno pytanie co do 1.
Chodzi mi o to by dll z SFML dołączyć do programu ale dll z visual studio "były w exe".
komentarz 30 września 2016 przez niezalogowany
hmm, jeżeli chodzi o dlle visuala to zwyczajowo dodaje się ich instalkę, np: https://www.microsoft.com/pl-pl/download/details.aspx?id=48145

Podobne pytania

0 głosów
3 odpowiedzi 602 wizyt
pytanie zadane 25 stycznia 2017 w C i C++ przez iWantCode Bywalec (2,170 p.)
0 głosów
4 odpowiedzi 2,406 wizyt
pytanie zadane 17 sierpnia 2016 w C i C++ przez czmyk Obywatel (1,100 p.)
0 głosów
2 odpowiedzi 522 wizyt
pytanie zadane 4 czerwca 2016 w C i C++ przez maciek061 Gaduła (4,490 p.)

93,718 zapytań

142,629 odpowiedzi

323,261 komentarzy

63,265 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...