sk2:sfml
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| sk2:sfml [2023/11/29 22:54] – jkonczak | sk2:sfml [2023/11/30 12:15] (current) – jkonczak | ||
|---|---|---|---|
| Line 2: | Line 2: | ||
| Aby zainstalować potrzebne pakiety na __Linuksie SK prog__, należy wykonać: | Aby zainstalować potrzebne pakiety na __Linuksie SK prog__, należy wykonać: | ||
| - | < | + | < |
| < | < | ||
| su | su | ||
| Line 10: | Line 10: | ||
| Aby zainstalować potrzebne pakiety na __Linuksie lokalnym__, należy wykonać: | Aby zainstalować potrzebne pakiety na __Linuksie lokalnym__, należy wykonać: | ||
| - | < | + | < |
| < | < | ||
| sudo zypper install -y sfml2-devel | sudo zypper install -y sfml2-devel | ||
| Line 49: | Line 49: | ||
| promują użycie aktywnego czekania, tzn. aplikacja będzie zużywać procesor nawet | promują użycie aktywnego czekania, tzn. aplikacja będzie zużywać procesor nawet | ||
| jeśli nic się nie dzieje. | jeśli nic się nie dzieje. | ||
| - | Aby uniknąć | + | Aby uniknąć |
| - | to " | + | to " |
| </ | </ | ||
| Mimo posiadania modułu do obsługi połączeń sieciowych, funkcja '' | Mimo posiadania modułu do obsługi połączeń sieciowych, funkcja '' | ||
| nie wspiera zdarzeń z gniazd. | nie wspiera zdarzeń z gniazd. | ||
| - | Obsługę gniazd w pętli zdarzeń należy zbudować ręcznie. | + | \\ |
| + | **Obsługę gniazd w pętli zdarzeń należy zbudować ręcznie.** | ||
| ===== Budowanie kodu i CMake ===== | ===== Budowanie kodu i CMake ===== | ||
| Aby zbudować kod używający SFML, należy dodać do opcji kompilatora łączenie z | Aby zbudować kod używający SFML, należy dodać do opcji kompilatora łączenie z | ||
| - | odpowiednimi bibliotekami: | + | odpowiednimi bibliotekami: |
| '' | '' | ||
| Ręcznie, z linii poleceń można podać (np. dla programu potrzebującego modułów graphics i network): | Ręcznie, z linii poleceń można podać (np. dla programu potrzebującego modułów graphics i network): | ||
| - | < | + | < |
| <code bash>c++ prog.cpp -o prog -lsfml-graphics -lsfml-network</ | <code bash>c++ prog.cpp -o prog -lsfml-graphics -lsfml-network</ | ||
| Dla systemu automatyzacji budowania CMake należy do pliku '' | Dla systemu automatyzacji budowania CMake należy do pliku '' | ||
| - | < | + | < |
| <code cmake> | <code cmake> | ||
| - | find_package(SFML 2.6 COMPONENTS system network REQUIRED) | + | find_package(SFML 2.5 COMPONENTS system network REQUIRED) |
| target_link_libraries(prog | target_link_libraries(prog | ||
| </ | </ | ||
| - | < | + | < |
| SFML __nie__ ustawia zmiennych zawierających listę modułów do linkowania, trzeba | SFML __nie__ ustawia zmiennych zawierających listę modułów do linkowania, trzeba | ||
| je podać ręcznie. | je podać ręcznie. | ||
| Line 79: | Line 80: | ||
| < | < | ||
| Przykład kompletnego pliku '' | Przykład kompletnego pliku '' | ||
| - | < | + | < |
| <code cmake> | <code cmake> | ||
| cmake_minimum_required(VERSION 3.12) | cmake_minimum_required(VERSION 3.12) | ||
| project(myProg) | project(myProg) | ||
| set(CMAKE_CXX_STANDARD 20) | set(CMAKE_CXX_STANDARD 20) | ||
| - | find_package(SFML 2.6 COMPONENTS graphics system network REQUIRED) | + | find_package(SFML 2.5 COMPONENTS graphics system network REQUIRED) |
| add_executable(myProg main.cpp window.h window.cpp) | add_executable(myProg main.cpp window.h window.cpp) | ||
| target_link_libraries(myProg sfml-graphics sfml-network) | target_link_libraries(myProg sfml-graphics sfml-network) | ||
| Line 93: | Line 94: | ||
| Klasy do obsługi sieci są dostępne po dodaniu do kodu dyrektywy: | Klasy do obsługi sieci są dostępne po dodaniu do kodu dyrektywy: | ||
| - | < | + | < |
| <code c++># | <code c++># | ||
| Line 124: | Line 125: | ||
| * '' | * '' | ||
| * '' | * '' | ||
| + | | ||
| + | **Uwaga:** klasy oferowane przez SFML nie mają konstruktorów kopiujących (//copy constuctor// | ||
| ==== Tryb nieblokujący ==== | ==== Tryb nieblokujący ==== | ||
| Line 140: | Line 143: | ||
| \\ | \\ | ||
| Odpowiednio nowe połączenie, | Odpowiednio nowe połączenie, | ||
| - | argumentu przekazywanego przez referencję. | + | argumentu przekazywanego przez referencję, np: |
| + | < | ||
| + | < | ||
| + | <code C++> | ||
| + | char buffer[1024]; | ||
| + | size_t receivedBytes; | ||
| + | if (sock.receive(buffer, | ||
| + | sf::String receivedBufferAsString(std:: | ||
| + | (…) | ||
| + | </ | ||
| + | < | ||
| + | <code C++> | ||
| + | std:: | ||
| + | if (servSock.accept(clients[clientIdSequencer]) == sf:: | ||
| + | int clientId = clientIdSequencer++; | ||
| + | clients[clientId].send(helloPacket); | ||
| + | (…) | ||
| + | </ | ||
| + | < | ||
| ==== Zadania ==== | ==== Zadania ==== | ||
| Line 164: | Line 185: | ||
| Przykładowo, | Przykładowo, | ||
| - | < | + | < |
| - | < | + | < |
| <code C++> | <code C++> | ||
| enum MessageType : sf::Uint8 { Foo = 1, Bar, Baz }; | enum MessageType : sf::Uint8 { Foo = 1, Bar, Baz }; | ||
| Line 199: | Line 220: | ||
| Dla poprawienia modularności i czytelności kodu można dodać własne operatory: | Dla poprawienia modularności i czytelności kodu można dodać własne operatory: | ||
| - | < | + | < |
| - | < | + | < |
| <code C++> | <code C++> | ||
| sf::Packet & | sf::Packet & | ||
| Line 251: | Line 272: | ||
| \\ | \\ | ||
| Klasa '' | Klasa '' | ||
| - | pakietu ([[https:// | + | pakietu ([[https:// |
| + | [[https:// | ||
| \\ | \\ | ||
| Pakiet podany jako argument jest wypełniany danymi tylko w ostatnim wywołaniu funkcji '' | Pakiet podany jako argument jest wypełniany danymi tylko w ostatnim wywołaniu funkcji '' | ||
| Line 288: | Line 310: | ||
| Przykład użycia klasy '' | Przykład użycia klasy '' | ||
| - | < | + | < |
| - | < | + | < |
| <code c++> | <code c++> | ||
| #include < | #include < | ||
| Line 329: | Line 351: | ||
| SFML oferuje też klasy do wysłania żądań HTTP i obsługi FTP, ale nie obsługuje | SFML oferuje też klasy do wysłania żądań HTTP i obsługi FTP, ale nie obsługuje | ||
| - | powszechnego dziś dla protokołu HTTP szyfrowania. | + | powszechnego dziś dla protokołu HTTP szyfrowania |
| + | z adresem zaczynającym się od '' | ||
| ===== Przykład z GUI ===== | ===== Przykład z GUI ===== | ||
| Line 338: | Line 361: | ||
| objętość kodu który trzeba napisać żeby cokolwiek osiągnąć w tej bibliotece. | objętość kodu który trzeba napisać żeby cokolwiek osiągnąć w tej bibliotece. | ||
| Powyższy przykład ma 277 linii kodu. Dla porównania daleko bardziej funkcjonalny | Powyższy przykład ma 277 linii kodu. Dla porównania daleko bardziej funkcjonalny | ||
| - | klient TCP w Qt (z poprzednich zajęć) ma 115 linii kodu i to już okazało się dla | + | klient TCP w Qt (z poprzednich zajęć) ma 115 linii kodu i to już okazało się dla |
| części osób zaporową liczbą. | części osób zaporową liczbą. | ||
sk2/sfml.1701298459.txt.gz · Last modified: (external edit)