ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° SFML (Simple and Fast Multimedia Library) β ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ Π³ΡΠ°ΡΠΈΠΊΠΎΠΉ, Π·Π²ΡΠΊΠΎΠΌ ΠΈ ΡΠ΅ΡΠ΅Π²ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π½Π° C++. ΠΠ½Π° ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ 2D-ΠΈΠ³Ρ, ΠΌΡΠ»ΡΡΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡΠΎΡΡΡΡ GUI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ Ρ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ²: ΠΎΡ Π²ΡΠ±ΠΎΡΠ° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π΄ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π²Ρ Π½Π°ΠΉΠ΄ΡΡΠ΅ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Windows (Visual Studio, MinGW) ΠΈ Linux (GCC/Clang), Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΈΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π½Π΅Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ β Π·Π΄Π΅ΡΡ Π²Ρ Π½Π°ΠΉΠ΄ΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
1. ΠΡΠ±ΠΎΡ Π²Π΅ΡΡΠΈΠΈ SFML ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ
ΠΠ΅ΡΠ΅Π΄ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅, ΠΊΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ SFML Π²Π°ΠΌ Π½ΡΠΆΠ½Π°. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ 2026 Π³ΠΎΠ΄Π°) β SFML 2.6.x, Π½ΠΎ Π΄Π»Ρ ΡΡΠ΅Π±Π½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ 2.5.1 ΠΈΠ·-Π·Π° Π»ΡΡΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΆΠ½ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ (x86 ΠΈΠ»ΠΈ x64) ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ.
ΠΠ»Ρ Windows Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ, Π° Π΄Π»Ρ Linux ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠ±ΠΎΡΠΊΠ° ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² (Ρ ΠΎΡΡ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² SFML Π΅ΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ ). ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
- π₯οΈ Windows: Visual Studio 2019/2022 ΠΈΠ»ΠΈ MinGW-w64 (Π²Π΅ΡΡΠΈΡ 8.1+). ΠΠ»Ρ VS ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ
Desktop development with C++. - π§ Linux: GCC 7.0+ ΠΈΠ»ΠΈ Clang 5.0+, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
libx11-dev,libudev-dev,libfreetype6-dev. - π§ macOS: Xcode Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ (Π΄Π»Ρ Homebrew).
ΠΡΠ»ΠΈ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π² Visual Studio, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ±ΡΠ°Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠ±ΠΎΡΠΊΠΈ (x64 ΠΈΠ»ΠΈ Win32). ΠΠ»Ρ MinGW ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ SFML β ΠΈΠ½Π°ΡΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠ΅ ΡΠΌΠ΅ΡΠΈΠ²Π°ΠΉΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ SFML, ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,MSVCΠΈMinGW). ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ Π²ΠΈΠ΄Π°undefined referenceΠΈΠ»ΠΈ ΠΊΡΠ°Ρ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅.
2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° SFML Π½Π° Windows
ΠΠ° Windows ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°. Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ Π°ΡΡ
ΠΈΠ² Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ (32-bit ΠΈΠ»ΠΈ 64-bit) ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° (Visual C++ ΠΈΠ»ΠΈ MinGW). Π Π°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, C:\SFML\.
Π‘ΡΡΡΠΊΡΡΡΠ° Π°ΡΡ ΠΈΠ²Π°:
| ΠΠ°ΠΏΠΊΠ° | Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ | ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|
bin | .dll-ΡΠ°ΠΉΠ»Ρ | ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½ΡΠΆΠ½Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ |
include | ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ (.hpp) | ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΠΊΠΎΠ΄Π΅ ΡΠ΅ΡΠ΅Π· #include |
lib | .lib-ΡΠ°ΠΉΠ»Ρ (Π΄Π»Ρ VS) ΠΈΠ»ΠΈ .a (Π΄Π»Ρ MinGW) | Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ |
cmake | Π€Π°ΠΉΠ»Ρ Π΄Π»Ρ CMake | ΠΡΠΆΠ½Ρ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΡΠ΅ΡΠ΅Π· CMake |
ΠΠ»Ρ Visual Studio Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ
Console Application. - Π ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° (
Alt+F7) ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π²VC++ DirectoriesΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΡΠΈ:- π
Include Directories:C:\SFML\include - π
Library Directories:C:\SFML\lib
- π
Linker β Input β Additional Dependencies Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ sfml-graphics): sfml-graphics.lib;sfml-window.lib;sfml-system.lib..dll-ΡΠ°ΠΉΠ»Ρ ΠΈΠ· SFML/bin Π² ΠΏΠ°ΠΏΠΊΡ Ρ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° (Debug/ ΠΈΠ»ΠΈ Release/).Π‘ΠΊΠ°ΡΠ°Π½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π°ΡΡ ΠΈΠ² (MSVC x64/x86)|ΠΡΡΠΈ ΠΊ include/lib Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°|ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΊΠ°Π·Π°Π½Ρ Π² Linker β Input|DLL-ΡΠ°ΠΉΠ»Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΏΠ°ΠΏΠΊΡ Ρ .exe|ΠΡΠΎΠ΅ΠΊΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π±Π΅Π· ΠΎΡΠΈΠ±ΠΎΠΊ-->
ΠΠ»Ρ MinGW ΠΏΡΠΎΡΠ΅ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ .a-ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ lib ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΡΡ SFML. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ MinGW-w64 Π΄Π»Ρ x64, ΡΠΊΠ°ΡΠΈΠ²Π°ΠΉΡΠ΅ SFML-2.6.x-windows-gcc-64-bit.
3. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° SFML Π½Π° Linux
ΠΠ° Linux ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ SFML ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠ»Ρ Debian/Ubuntu Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅:
sudo apt update
sudo apt install libsfml-dev
ΠΠ»Ρ Fedora/RHEL:
sudo dnf install SFML-devel
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΠ°, ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° ΠΈ ΡΠΎΠ±Π΅ΡΠΈΡΠ΅ Π²ΡΡΡΠ½ΡΡ:
tar xzf SFML-2.6.0-sources.tar.gz
cd SFML-2.6.0/
cmake -DCMAKE_BUILD_TYPE=Release .
make
sudo make install
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ Π½Π°Π»ΠΈΡΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π² /usr/local/include/SFML ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π² /usr/local/lib. ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ apt, ΠΏΡΡΠΈ Π±ΡΠ΄ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ (/usr/include/SFML ΠΈ /usr/lib/x86_64-linux-gnu).
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΡΡΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ ΡΠ΅ΡΠ΅Π·CMakeΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (libx11-dev,libgl1-mesa-devΠΈ Π΄Ρ.). ΠΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ SFML Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΠ»ΠΈΠ½ΠΊΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π΄Π»Ρ g++:
g++ main.cpp -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system
Visual Studio (MSVC)|MinGW|GCC (Linux)|Clang|ΠΡΡΠ³ΠΎΠΉ-->
4. ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° SFML: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
Π§ΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ SFML ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΎΠΊΠ½ΠΎ. ΠΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
#include <SFML/Graphics.hpp>
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Works!");
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.display();
}
return 0;
}
Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ»ΠΈ Π²ΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ΠΎ Π²Π΅ΡΠ½ΠΎ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΡΡΡΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ SFML Works!. ΠΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅:
- π ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΠΏΡΡΠ΅ΠΉ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
- π ΠΠ°Π»ΠΈΡΠΈΠ΅ Π²ΡΠ΅Ρ
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
.dll-ΡΠ°ΠΉΠ»ΠΎΠ² (Π΄Π»Ρ Windows) Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. - π ΠΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΡΠ»Π°Π³ΠΎΠ² Π»ΠΈΠ½ΠΊΠΎΠ²ΡΠΈΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π²Π°ΠΆΠ΅Π½:
-lsfml-graphicsΠ΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ΄ΡΠΈ ΠΏΠΎΡΠ»Π΅-lsfml-window).
ΠΡΠ»ΠΈ ΠΎΠΊΠ½ΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ, Π½ΠΎ ΡΡΠ°Π·Ρ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΠΉ (ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅). ΠΠ° Windows ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ Π°Π½ΡΠΈΠ²ΠΈΡΡΡ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ .dll-ΡΠ°ΠΉΠ»Ρ SFML.
ΠΠ»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ Π² Visual Studio Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ Π»ΠΎΠ³Π°: Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Linker β General β Show Progress ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Yes (/VERBOSE).
5. ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ SFML Ρ CMake
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ CMake Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² CMakeLists.txt ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ:
cmake_minimum_required(VERSION 3.10)
project(SFMLProject)
set(CMAKE_CXX_STANDARD 17)
find_package(SFML 2.6 COMPONENTS graphics window system REQUIRED)
add_executable(sfml-app main.cpp)
target_link_libraries(sfml-app PRIVATE SFML::Graphics SFML::Window SFML::System)
ΠΠ»Ρ Windows ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ SFML, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π½Π΅ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅:
set(SFML_DIR "C:/SFML/lib/cmake/SFML")
Π‘Π³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΡΠΎΠ±Π΅ΡΠΈΡΠ΅ Π΅Π³ΠΎ. CMake Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΡΡΠ½Π΅Ρ Π½ΡΠΆΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. ΠΡΠ»ΠΈ find_package Π½Π΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ SFML, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅:
- π ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
SFML_ROOT(Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΠΏΠ°ΠΏΠΊΡ Ρ SFML). - π ΠΠ°Π»ΠΈΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π°
SFMLConfig.cmakeΠ² ΠΏΠ°ΠΏΠΊΠ΅lib/cmake/SFML.
ΠΠ»Ρ Linux/CMake ΠΎΠ±ΡΡΠ½ΠΎ Ρ Π²Π°ΡΠ°Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΡΡΠ΅ΠΉ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΡΠ°Π»ΠΈ SFML Π²ΡΡΡΠ½ΡΡ, ΡΠΊΠ°ΠΆΠΈΡΠ΅:
set(SFML_DIR "/usr/local/lib/cmake/SFML")
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ CMake Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ SFML?
1. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎ ΠΏΠ°ΠΏΠΊΠ° Ρ SFML ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΡ cmake Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ SFMLConfig.cmake.
2. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ SFML_DIR Π² CMake ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΡΡ ΠΏΠ°ΠΏΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, set(SFML_DIR "C:/SFML/lib/cmake/SFML")).
3. ΠΠ»Ρ Linux ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ SFML ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΈΠ»ΠΈ Π²ΡΡΡΠ½ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ SFMLConfig.cmake Π² /usr/local/lib/cmake/SFML/.
4. ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ GCC, ΡΠΎΠ±Π΅ΡΠΈΡΠ΅ SFML ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΎΠ² Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΡΠ»Π°Π³Π°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
6. Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ SFML ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΡΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΡ ΡΠ°ΠΌΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
| ΠΡΠΈΠ±ΠΊΠ° | ΠΡΠΈΡΠΈΠ½Π° | Π Π΅ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|
undefined reference to `sf::String::String(...)' |
ΠΠ΅ ΡΠ»ΠΈΠ½ΠΊΠΎΠ²Π°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° sfml-system ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ. |
ΠΠΎΠ±Π°Π²ΡΡΠ΅ -lsfml-system Π² ΠΊΠΎΠ½Π΅Ρ ΡΠΏΠΈΡΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π Visual Studio ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π² Additional Dependencies. |
fatal error: SFML/Graphics.hpp: No such file or directory |
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. | ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΡΡΡ ΠΊ include Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ ΡΠ»Π°Π³ -I Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. |
| ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ, Π½ΠΎ ΠΎΠΊΠ½ΠΎ Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ (Windows) | ΠΡΡΡΡΡΡΠ²ΡΡΡ .dll-ΡΠ°ΠΉΠ»Ρ Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ .exe. |
Π‘ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ Π²ΡΠ΅ .dll ΠΈΠ· SFML/bin Π² ΠΏΠ°ΠΏΠΊΡ ΡΠ±ΠΎΡΠΊΠΈ (Debug/ ΠΈΠ»ΠΈ Release/). |
Failed to create OpenGL context |
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ ΠΈΠ»ΠΈ OpenGL. | ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ. ΠΠ° Linux ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ mesa-utils ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ OpenGL ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ glxinfo. |
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ Π²ΠΈΠ΄Π° LNK1104: cannot open file 'sfml-graphics.lib', ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ:
- πΉ ΠΡ ΡΠΊΠ°ΡΠ°Π»ΠΈ Π²Π΅ΡΡΠΈΡ SFML Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ (
x86ΠΈΠ»ΠΈx64). - πΉ Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠ±ΡΠ°Π½Π° ΡΠ° ΠΆΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°, ΡΡΠΎ ΠΈ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
x64Π΄Π»ΡSFML-64-bit). - πΉ ΠΡΡΡ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅
libΡΠΊΠ°Π·Π°Π½ Π²Library Directories.
ΠΠ° Linux ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΈΠ΄Π° symbol lookup error ΡΠ°ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ Π²Π΅ΡΡΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ (libsfml-*) ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΠ°Π½Ρ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΡΠ»Π°Π³Π°ΠΌΠΈ.
Π‘Π°ΠΌΠ°Ρ ΡΠ°ΡΡΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ SFML β Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΡΡΠ΄Π½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅, ΡΡΠΎ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈ SFML ΡΠΎΠ±ΡΠ°Π½Ρ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ (x86 ΠΈΠ»ΠΈ x64).
7. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
ΠΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ SFML ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ:
- π ΠΡΠ»Π°Π΄ΠΊΠ°: Π Visual Studio ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
Debug-Π²Π΅ΡΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ (sfml-graphics-d.lib) Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ. - π¦ Π‘ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ°: Π§ΡΠΎΠ±Ρ Π½Π΅ ΡΠ°ΡΠΏΠΎΡΡΡΠ°Π½ΡΡΡ
.dll-ΡΠ°ΠΉΠ»Ρ, ΡΠ»ΠΈΠ½ΠΊΡΠΉΡΠ΅ SFML ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (SFML-static) ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π°Π³SFML_STATICΠ² ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ. - π ΠΡΠ»ΡΡΠΈΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ: SFML ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°, Π½ΠΎ ΡΠ΅ΡΡΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
sf::RenderWindow) Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ.
ΠΠ»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ Π² Visual Studio:
- Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ Π²Π΅ΡΡΠΈΡ SFML Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ
-static. - Π ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π²
Preprocessor DefinitionsΡΠ»Π°Π³SFML_STATIC. - ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
sfml-window-s.lib;sfml-system-s.lib).
ΠΠ° Linux Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
g++ main.cpp -o sfml-app -static -lsfml-graphics-s -lsfml-window-s -lsfml-system-s
ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, Π½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π΅Π³ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅.
8. ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ
ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, SFML ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ C++:
- π¦ vcpkg (Windows/Linux/macOS):
vcpkg install sfml
- π¦ Conan (ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΉ):
conan install sfml/2.6.0@
ΠΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°Π·ΡΠ΅ΡΠ°Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΈ Π½Π°ΡΡΡΠΎΡΡ ΠΏΡΡΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ vcpkg ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ CMake:
cmake -DCMAKE_TOOLCHAIN_FILE=[vcpkg-root]/scripts/buildsystems/vcpkg.cmake ..
ΠΠ»Ρ Conan ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ conanfile.txt:
[requires]
sfml/2.6.0
[generators]
cmake
ΠΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΄ΠΎΠ±Π½Ρ Π΄Π»Ρ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π³Π΄Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ vcpkg ΠΈΠ»ΠΈ Conan ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ SFML ΠΈ Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ (FAQ)
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ SFML Π² ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ?
ΠΠ°, SFML ΡΠ°ΡΠΏΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ zlib/png, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π°Π²ΡΠΎΡΡΡΠ²Π° (Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π² Π±ΠΈΠ½Π°ΡΠ½ΡΡ
ΡΠ°ΠΉΠ»Π°Ρ
). ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌ. Π² ΡΠ°ΠΉΠ»Π΅ license.md Π² Π°ΡΡ
ΠΈΠ²Π΅ SFML.
ΠΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ SFML Π΄ΠΎ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ?
1. Π£Π΄Π°Π»ΠΈΡΠ΅ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ SFML (ΠΏΠ°ΠΏΠΊΠΈ include, lib, bin).
2. Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°.
3. ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΡΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° (Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΠ°ΠΏΠΎΠΊ).
4. ΠΠ΅ΡΠ΅ΡΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ vcpkg/Conan, ΠΎΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ vcpkg update ΠΈΠ»ΠΈ conan update.
ΠΠΎΡΠ΅ΠΌΡ SFML ΡΠΎΡΠΌΠΎΠ·ΠΈΡ Π½Π° ΠΌΠΎΡΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅?
Π§Π°ΡΡΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ:
- π₯οΈ ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ OpenGL: ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ.
- π Π‘Π»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ
window.display(): ΠΠ³ΡΠ°Π½ΠΈΡΡΡΠ΅ FPS Ρ ΠΏΠΎΠΌΠΎΡΡΡwindow.setFramerateLimit(60). - ποΈ Π£ΡΠ΅ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ: ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΊΡΡΡΡ).
ΠΠ»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Valgrind Π½Π° Linux).
ΠΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ SFML ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π½Π° Qt?
1. ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΡΡΠΈ ΠΊ SFML Π² .pro-ΡΠ°ΠΉΠ»:
INCLUDEPATH += /usr/include/SFML
LIBS += -lsfml-graphics -lsfml-window -lsfml-system
2. Π main.cpp ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ SFML Π΄ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Qt, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΌΠ°ΠΊΡΠΎΡΠΎΠ²:
#include <SFML/Graphics.hpp>
#include <QApplication>
3. Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠΈ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π² LIBS.
ΠΠ΄Π΅ Π½Π°ΠΉΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π°?
ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ: SFML 2.6 API.
ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²:
- π ΠΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ (Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ SFML).
- π ΠΠ±ΡΡΠ°ΡΡΠΈΠ΅ ΡΡΡΠΎΡΠΈΠ°Π»Ρ (ΠΎΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° Π΄ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ΅ΡΡΡ).
- π Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ°.