Sfml ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅: Π£ΡΠΎΠΊ 1. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SFML ΠΊ ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Microsoft Visual Studio 2013 | kychka-pc
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SFML ΠΊ Visual Studio
Π‘ΡΠ΅Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ:Β
Π ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ SFML ΠΊ ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Visual Studio.
SFML ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ΄ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ³Ρ ΠΈ ΠΌΡΠ»ΡΡΠΈΠΌΠ΅Π΄ΠΈΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ. ΠΡΠΆΠ½ΠΎ ΠΏΡΠΎΠΉΡΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅: http://www.sfml-dev.org/download/sfml/2.3.2/ (ΡΡΠΎ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΡ) ΠΈ ΡΠΊΠ°ΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ. ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ VS.
Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΊΡΠ΄Π° Π²Π°ΠΌ ΡΠ³ΠΎΠ΄Π½ΠΎ, Π½Π° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΡΡΡΡΠΊΠΈΡ Π±ΡΠΊΠ² Π² ΠΏΠ°ΠΏΠΊΠ°Ρ ΠΏΡΡΠΈ.
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ Visual Studio, ΡΠ°ΠΉΠ»->ΡΠΎΠ·Π΄Π°ΡΡ->ΠΏΡΠΎΠ΅ΠΊΡ->ΠΏΡΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ. (ΠΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΌΠΈ).
ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ β Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π²Π° Π² ΠΎΠ±ΠΎΠ·ΡΠ΅Π²Π°ΡΠ΅Π»Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ Π²ΠΊΠ»Π°Π΄ΠΊΡ Β«Π€Π°ΠΉΠ»Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°Β»->ΠΏΡΠ°Π²ΡΠΉ ΠΊΠ»ΠΈΠΊ->Π΄ΠΎΠ±Π°Π²ΠΈΡΡ->ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ->ΡΠ°ΠΉΠ» C++ (ΠΈΠΌΡ main.cpp)->Π΄ΠΎΠ±Π°Π²ΠΈΡΡ.
ΠΠ°Π»Π΅Π΅ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π²ΠΎΡ ΡΡΠΎΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΠ°ΠΉΠ» main.cpp
#include <SFML/Graphics.hpp> Β int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "SFMLworks"); sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); Β while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } Β window.clear(); window.draw(shape); window.display(); } Β return 0; }
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠΏΡΡΠΊΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ:
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΡ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ β Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ SFML.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π°, Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Debug.
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π²Π²Π΅ΡΡ Ρ Β«ΠΏΡΠΎΠ΅ΠΊΡΒ»->ΡΠ²ΠΎΠΉΡΡΠ²Π° βΠΈΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°β->ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ->C++->ΠΎΠ±ΡΠΈΠ΅
Π ΠΏΡΠ½ΠΊΡΠ΅ Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡ Π΄ΠΎ ΡΠ°Π½Π½Π΅Π΅ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°ΡΡ ΠΈΠ²Π° Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ (+ \include.)
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: C:\Program Files\SFML-2.3.2\include
ΠΠ°ΡΠ΅ΠΌ ΠΈΠ΄Π΅ΠΌ Π² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊ->ΠΎΠ±ΡΠΈΠ΅ ΠΈ Π² ΠΏΡΠ½ΠΊΡΠ΅ Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΒ» ΠΏΡΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ lib;
ΠΠ°Π»Π΅Π΅ ΠΈΠ΄Π΅ΠΌ Π² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΡΠΈΠΊΠ΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡ Π²Π²ΠΎΠ΄ ΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Β«Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΒ» Π²ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ΅ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΡΠΊΡ:
sfml-graphics-d.lib;sfml-window-d.lib;sfml-system-d.lib;sfml-audio-d.lib;
Π’ΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΡΠΈΡ β ΠΈΠ΄Π΅ΠΌ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡ C++->ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Β«ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Β» Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ Π΄ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌ: SFML_DYNAMIC;
ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Ρ, Π²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Debug. ΠΡΠ΅ ΡΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Release.
ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π²Π²Π΅ΡΡ
Ρ Β«ΠΏΡΠΎΠ΅ΠΊΡΒ»->ΡΠ²ΠΎΠΉΡΡΠ²Π° βΠΈΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°β->ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. Π Π»Π΅Π²ΠΎΠΌ Π²Π΅ΡΡ
Π½Π΅ΠΌ ΡΠ³Π»Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° ΡΠ»Π°ΠΉΠ΄Π΅Ρ ΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Release.
Π ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΠΏΡΠ½ΠΊΡΠΎΠ².
ΠΠ°ΠΏΡΡΡΠΈΠΌ ΠΈ ΡΠ»ΠΎΠ²ΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ. ΠΠ°ΡΠΎ ΡΠΎΠ±Π΅ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ°ΠΏΠΊΠ° debug.
Π’Π΅ΠΏΠ΅ΡΡ ΠΈΠ΄Π΅ΠΌ Π² ΠΏΠ°ΠΏΠΊΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΎΠ² βbinβ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΡΠΊΠ°ΡΠ°Π»ΠΈ ΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ (ΠΌΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ D:\SFML-2.2\bin\) ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ Π²ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ (dll ΡΠ°ΠΉΠ»Ρ ΡΠΈΠΏΠ° sfml-graphics-2.dll) Π² ΠΏΠ°ΠΏΠΊΡ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π² ΠΏΠ°ΠΏΠΊΡ debug (ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΡΠ° ΠΏΠ°ΠΏΠΊΠ°), Π½ΠΎ Π½Π΅ Π² ΡΠΎΡ debug, Π³Π΄Π΅ Π»Π΅ΠΆΠΈΡ ΡΠ°ΠΉΠ» Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ βmain.cppβ, Π° ΡΠΎΡ, Π³Π΄Π΅ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ exe ΡΠ°ΠΉΠ».
Π ΡΡΡ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΈ Π²ΠΎΡ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ :
msvcp100d.dll;msvcp110.dll;msvcp110d.dll;msvcr100d.dll;msvcr110.dll;msvcr110d.dll;
ΠΡΠ΅ ΡΡΠΈ ΡΠ°ΠΉΠ»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π² zip Π°ΡΡ ΠΈΠ²Π΅, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠΈΠ» ΡΠ½ΠΈΠ·Ρ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ Π²ΡΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π·Π΅Π»ΡΠ½ΡΠΉ ΠΊΡΡΠ³ ΠΊΠ°ΠΊ Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ Π½ΠΈΠΆΠ΅:
ΠΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π²ΠΎΡ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°:
Π‘ΠΎΠ²Π΅ΡΡΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ: Dll-Files Fixer.
ΠΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» | Π Π°Π·ΠΌΠ΅Ρ |
---|---|
msvcp.zip | 550.93 ΠΊΠ± |
msvcr.zip | 1.61 ΠΠ± |
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ SFML ΠΊ ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ DEV-CPP 5.11 | kychka-pc
ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ!
Π Π΅ΡΠΈΠ» ΠΏΠΎΠΌΠΎΡΡ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ°ΠΉΡΠ° Ρ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΎΠ±ΡΡΠ°ΡΡΠΈΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠΌ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° ΡΠ°ΠΉΡΠ΅ ΡΠΆΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°Π»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ MS Visual Studio Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Ρ ΡΠ°Π·Π±Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΊΠΈ SFML 2.4.2 ΠΈ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Dev-Cpp 5.11 Ρ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ ΠΊ Π½Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ TDM-GCC 4.9.2.
Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΎ Β«ΠΏΡΠΈΠΊΡΡΡΠΊΠ΅Β» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SFML ΠΊ Dev-Cpp ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ, ΡΠ°ΠΊ ΠΈ Π²ΡΠ΅ ΡΠΎΠ½ΠΊΠΎΡΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠ΅Π΄Ρ ΡΠΌΡΡΠ»Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΡΠ°Π·Π΄ΡΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ. ΠΡΠ° ΡΡΠ°ΡΡΡ Π΄Π»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ ΡΠ΄Π΅Π»Π°Π» Π²ΡΠ±ΠΎΡ Π½Π° ΡΡΠΎΠΉ ΡΠ²ΡΠ·ΠΊΠ΅.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΠΊΠ°ΡΠ°Π΅ΠΌ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π½Π°Ρ Π³ΠΎΡΠΎΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:ΠΈ/ΠΈΠ»ΠΈ:Π ΠΊΡΠ°ΠΉΠ½Π΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΌΠΈ. ΠΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π·Π΄Π΅ΡΡ. (Π°Π½Π³Π».ΡΠ·)
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈ, ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π°ΡΡ
ΠΈΠ² Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ Π΄Π»Ρ Π½Π°Ρ ΠΌΠ΅ΡΡΠ΅. ΠΠ»Ρ ΡΠ΅Π±Ρ ΡΠ΄Π΅Π»Π°Π» ΡΠ°ΠΊΠΎΠΉ Π²ΡΠ±ΠΎΡ:
<ΠΌΠ΅ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°>/SFML/x32 , ΠΈ
<ΠΌΠ΅ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°>/SFML/x64
β ΠΎΠ±Π΅ Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ
Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°, ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΡ. ΠΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π»ΠΈΡΡ ΠΏΠ°ΠΏΠΊΠΈ: \bin, \include ΠΈ \lib.
ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ: ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅ΡΡΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΠ°ΡΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ IDE ΠΈ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ Π² Π²Π΅ΡΡ
Π½Π΅ΠΌ ΠΌΠ΅Π½Ρ: Π‘Π΅ΡΠ²ΠΈΡ -> ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°.
ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ βΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈβ ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠ΅ΡΡΠ° ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ°ΡΡΠ΅ΠΉ SFML, Π½Π°Π±ΠΈΠ²Π°Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΡΠ°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ Π½Π°Ρ
ΠΎΠ΄Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΡΠ΅ΡΠ΅Π· ΠΊΠ½ΠΎΠΏΠΎΡΠΊΡ ΡΠΏΡΠ°Π²Π°:ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΠΎ Π΄Π»Ρ:
Β«ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡΒ» β <ΠΌΠ΅ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ>\bin,
Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΒ» β <ΠΌΠ΅ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ>\lib,
Β«ΠΠΊΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π‘++Β» β <ΠΌΠ΅ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ>\include,
β ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ
Π΄Π»Ρ Π²Π°Ρ Π½Π°Π±ΠΎΡΠΎΠ² Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°:
Π’Π΅ΠΏΠ΅ΡΡ SFML ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π³ΠΎΡΠΎΠ²Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ . Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ Π½ΡΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ SFML Π² Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ Π² ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Dev-Cpp.
ΠΡΠ΄Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΡΡ:
Π£ΡΠΎΠΊ 33 SFML C++, Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ | kychka-pc
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include «view.h»
#include <iostream>
//#include <sstream>//ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΡΠ°Π½ΡΡΠ΅ Π²ΡΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡ ( Π² 13 ΠΎΠΌ ΡΡΠΎΠΊΠ΅ )
#include «mission.h»
#include «iostream»
#include «level.h»
#include <vector>
#include <list>
Β
Β
Β
using namespace sf;
////////////////////////////////////ΠΠ±ΡΠΈΠΉ ΠΊΠ»Π°ΡΡ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ//////////////////////////
class Entity {
public:
std::vector<Object> obj;
float dx, dy, x, y, speed,moveTimer;
int w,h,health;
bool life, isMove, onGround;
Texture texture;
Sprite sprite;
String name;
Entity(Image &image, String Name, float X, float Y, int W, int H){
x = X; y = Y; w = W; h = H; name = Name; moveTimer = 0;
speed = 0; health = 100; dx = 0; dy = 0;
life = true; onGround = false; isMove = false;
texture.loadFromImage(image);
sprite.setTexture(texture);
sprite.setOrigin(w / 2, h / 2);
}
Β
FloatRect getRect(){
return FloatRect(x, y, w, h);
}
Β
virtual void update(float time) = 0;//Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΡΡ Ρ-ΡΠΈΡ
Β
};
////////////////////////////////////////////////////ΠΠΠΠ‘Π‘ ΠΠΠ ΠΠΠ////////////////////////
class Player :public Entity
{
public:
enum { left, right, up, down, jump, stay, right_Top } state;
int playerScore;
bool isShoot;
Β
Player(Image &image, String Name, Level &lev, float X, float Y, int W, int H) :Entity(image, Name, X, Y, W, H ){
Β Β playerScore = isShoot = 0; state = stay; obj = lev.GetAllObjects();
Β Β if (name == «Player1»){
Β Β sprite.setTextureRect(IntRect(4, 19, w, h));
Β Β }
Β Β }
Β
Β Β void control()
Β Β {
Β Β if (Keyboard::isKeyPressed){
Β Β if (Keyboard::isKeyPressed(Keyboard::Left)) {
Β Β state = left; speed = 0.1;
Β Β }
Β Β if (Keyboard::isKeyPressed(Keyboard::Right)) {
Β Β state = right; speed = 0.1;
Β Β }
Β
Β Β if ((Keyboard::isKeyPressed(Keyboard::Up)) && (onGround)) {
Β Β state = jump; dy = -0.6; onGround = false;
Β Β }
Β
Β Β if (Keyboard::isKeyPressed(Keyboard::Down)) {
Β Β state = down;
Β Β }
Β
Β Β if ((Keyboard::isKeyPressed(Keyboard::Right)) && (Keyboard::isKeyPressed(Keyboard::Up))) {
Β Β state = right_Top;
Β Β }
Β
Β Β /////Π²ΡΡΡΡΠ΅Π»
Β Β if (Keyboard::isKeyPressed(Keyboard::Space)) {
Β Β isShoot = true;
Β Β }
Β Β }
Β Β }
Β
Β Β
Β
Β Β void checkCollisionWithMap(float Dx, float Dy)
Β Β {
Β
Β Β for (int i = 0; i<obj.size(); i++)
Β Β if (getRect().intersects(obj[i].rect))
Β Β {
Β Β if (obj[i].name == «solid»)
Β Β {
Β Β if (Dy>0) { y = obj[i].rect.top — h;Β Β dy = 0; onGround = true; }
Β Β if (Dy<0) { y = obj[i].rect.top + obj[i].rect.height;Β Β dy = 0; }
Β Β if (Dx>0) { x = obj[i].rect.left — w; }
Β Β if (Dx<0) { x = obj[i].rect.left + obj[i].rect.width; }
Β Β }
Β Β // else { onGround = false; }
Β Β }
Β Β }
Β Β Β Β
Β Β void update(float time)
Β Β {
Β Β control();
Β Β switch (state)
Β Β {
Β Β case right:dx = speed; break;
Β Β case left:dx = -speed; break;
Β Β case up: break;
Β Β case down: dx = 0; break;
Β Β case stay: break;
Β Β case right_Top: dx = speed; break;//ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΠΏΡΠ°Π²ΠΎ Π²Π²Π΅ΡΡ , ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ ΠΈΠ΄ΡΠΈ Π²ΠΏΡΠ°Π²ΠΎ
Β Β }
Β Β x += dx*time;
Β Β checkCollisionWithMap(dx, 0);
Β Β y += dy*time;
Β Β checkCollisionWithMap(0, dy);
Β Β sprite.setPosition(x+w/2,y+h/2);
Β Β if (health <= 0){ life = false; }
Β Β if (!isMove){ speed = 0; }
Β Β if (life) { setPlayerCoordinateForView(x, y); }
Β Β dy = dy + 0.0015*time;
Β Β }
};
Β
Β
Β
class Enemy :public Entity{
public:
Enemy(Image &image, String Name,Level &lvl, float X, float Y, int W, int H) :Entity(image, Name, X, Y, W, H){
obj = lvl.GetObjects(«solid»);//ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ.ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΠ°Π³Π° Ρ ΠΊΠ°ΡΡΠΎΠΉ
if (name == «EasyEnemy»){
sprite.setTextureRect(IntRect(0, 0, w, h));
dx = 0.1;
}
}
Β
void checkCollisionWithMap(float Dx, float Dy)
{
for (int i = 0; i<obj.size(); i++)
if (getRect().intersects(obj[i].rect))
{
if (obj[i].name == «solid»)//Π΅ΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΏΡΡΡΡΠ²ΠΈΠ΅
{
if (Dy>0) { y = obj[i].rect.top — h;Β Β dy = 0; onGround = true; }
if (Dy<0) { y = obj[i].rect.top + obj[i].rect.height;Β Β dy = 0; }
if (Dx>0) { x = obj[i].rect.left — w;Β Β dx = -0.1; sprite.scale(-1, 1); }
if (Dx<0) { x = obj[i].rect.left + obj[i].rect.width; dx = 0.1; sprite.scale(-1, 1); }
}
}
}
Β
Β
void update(float time)
{
if (name == «EasyEnemy»){
//moveTimer += time;if (moveTimer>3000){ dx *= -1; moveTimer = 0; }//ΠΌΠ΅Π½ΡΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 3 ΡΠ΅ΠΊ(Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠΌΠ΅Π½Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ)
checkCollisionWithMap(dx, 0);
x += dx*time;
sprite.setPosition(x+w/2, y+h/2);
if (health <= 0){ life = false; }
}
}
};
Β
class Bullet :public Entity//ΠΊΠ»Π°ΡΡ ΠΏΡΠ»ΠΈ
{
public:
float targetX, targetY;//ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΡΠ»ΠΈ ΠΊ ΡΠ΅Π»ΠΈ
float vx,vy, distance;
Bullet(Image &image, String Name, Level &lvl, float X, float Y, int W, int H, float tX, float tY) :Entity(image, Name, X, Y, W, H){//Π²ΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π²Π·ΡΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ³ΡΠΎΠΊΠ° (int dir)
obj = lvl.GetObjects(«solid»);//ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ .ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π½ΡΠΆΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠ»ΠΈ Ρ ΠΊΠ°ΡΡΠΎΠΉ
x = X;
y = Y;
targetX = tX;
targetY = tY;
speed = 0.2;
w = h = 16;
life = true;
distance = sqrt((targetX — x) — (targetY — y));
vx = (targetX — x)/100; // 100 — Π΄ΠΈΡΡΠ°Π½ΡΠΈΡ
vy = (targetY — y)/100;
//Π²ΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅
}
Β
Β
void update(float time)
{
//x += speed*time*(targetX — x) /20;//ΡΠ°ΠΌΠΎ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ»ΠΈ ΠΏΠΎ Ρ
//y += speed*time*(targetY — y) /20;//ΠΏΠΎ Ρ
Β
x += vx*time*speed;
y += vy*time*speed;
Β
if (x <= 0) x = 1;// Π·Π°Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠ»ΠΈ Π² Π»Π΅Π²ΠΎΠΉ ΡΡΠ΅Π½Π΅, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΏΡΠΎΡΠ΅Π΄Π°Π½ΠΈΠΈ ΠΊΠ°Π΄ΡΠΎΠ² ΠΎΠ½Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ Π²ΡΠ»Π΅ΡΠ΅Π»Π° Π·Π° ΠΏΡΠ΅Π΄Π΅Π» ΠΊΠ°ΡΡΡ ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΡΠΈΠ±ΠΊΠΈ
if (y <= 0) y = 1;
for (int i = 0; i < obj.size(); i++) {//ΠΏΡΠΎΡ ΠΎΠ΄ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ solid
if (getRect().intersects(obj[i].rect)) //Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΡΠ»Π΅ΠΉ,
{
life = false;// ΡΠΎ ΠΏΡΠ»Ρ ΡΠΌΠΈΡΠ°Π΅Ρ
}
}
Β
sprite.setPosition(x+w/2, y+h/2);//Π·Π°Π΄Π°Π΅ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΡΠ»Π΅
}
};
Β
Β
Β
Β
class MovingPlatform : public Entity{//ΠΊΠ»Π°ΡΡ Π΄Π²ΠΈΠΆΡΡΠ΅ΠΉΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ
public:
MovingPlatform(Image &image, String Name, Level &lvl, float X, float Y, int W, int H) :Entity(image, Name, X, Y, W, H){
sprite.setTextureRect(IntRect(0, 0, W, H));//ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ
dx = 0.08;//ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π₯
}
Β
void update(float time)//ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
{
x += dx * time;//ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ
moveTimer += time;//Π½Π°ΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠΌΠ΅Ρ
if (moveTimer>2000) { dx*= -1; moveTimer = 0; }//Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ»ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 2 ΡΠ΅ΠΊ, ΡΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π° ΡΠ°ΠΉΠΌΠ΅Ρ ΠΎΠ±Π½ΡΠ»ΡΠ΅ΡΡΡ
sprite.setPosition(x+w/2, y+h/2);//Π·Π°Π΄Π°Π΅ΠΌ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠΏΡΠ°ΠΉΡΡ
}
};
Β
void changeLevel(Level &lvl,int &numberLevel) {
if (numberLevel == 1) { lvl.LoadFromFile(«map.tmx»); }
if (numberLevel == 2) { lvl.LoadFromFile(«map2.tmx»); }
if (numberLevel == 3) { lvl.LoadFromFile(«map3.tmx»); }
}
Β
bool startGame(RenderWindow &window,int &numberLevel){
view.reset(FloatRect(0, 0, 640, 480));
Β
Level lvl;
changeLevel(lvl,numberLevel);//Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΊΠ°ΡΡΡ Π΄Π»Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ
Β
SoundBuffer shootBuffer;//ΡΠΎΠ·Π΄Π°ΡΠΌ Π±ΡΡΠ΅Ρ Π΄Π»Ρ Π·Π²ΡΠΊΠ°
shootBuffer.loadFromFile(«shoot.ogg»);//Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π² Π½Π΅Π³ΠΎ Π·Π²ΡΠΊ
Sound shoot(shootBuffer);//ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π·Π²ΡΠΊ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π² Π½Π΅Π³ΠΎ Π·Π²ΡΠΊ ΠΈΠ· Π±ΡΡΠ΅ΡΠ°
Β
Music music;//ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΡΠ·ΡΠΊΠΈ
music.openFromFile(«music.ogg»);//Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠ°ΠΉΠ»
music.play();//Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ ΠΌΡΠ·ΡΠΊΡ
music.setLoop(true);
Β
Β
Image heroImage;
heroImage.loadFromFile(«images/MilesTailsPrower.gif»);
Β
Image easyEnemyImage;
easyEnemyImage.loadFromFile(«images/shamaich.png»);
easyEnemyImage.createMaskFromColor(Color(255, 0, 0));
Β
Image movePlatformImage;
movePlatformImage.loadFromFile(«images/MovingPlatform.png»);
Β
Image BulletImage;//ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠ»ΠΈ
BulletImage.loadFromFile(«images/bullet.png»);//Π·Π°Π³ΡΡΠ·ΠΈΠ»ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
BulletImage.createMaskFromColor(Color(0, 0, 0));//ΠΌΠ°ΡΠΊΠ° Π΄Π»Ρ ΠΏΡΠ»ΠΈ ΠΏΠΎ ΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ²Π΅ΡΡ
Β
std::list<Entity*>Β Β entities;
std::list<Entity*>::iterator it;
std::list<Entity*>::iterator it2;//Π²ΡΠΎΡΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ.Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°
Β
Β
std::vector<Object> e = lvl.GetObjects(«EasyEnemy»);
Β
for (int i = 0; i < e.size(); i++) entities.push_back(new Enemy(easyEnemyImage, «EasyEnemy», lvl, e[i].rect.left, e[i].rect.top, 200, 97));
Β
Object player = lvl.GetObject(«player»);
Β
Player p(heroImage, «Player1», lvl, player.rect.left, player.rect.top, 40, 30);
Β
e = lvl.GetObjects(«MovingPlatform»);//Π·Π°Π±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π² Π²Π΅ΠΊΡΠΎΡ
Β
for (int i = 0; i < e.size(); i++) entities.push_back(new MovingPlatform(movePlatformImage, «MovingPlatform», lvl, e[i].rect.left, e[i].rect.top, 95, 22));//Π·Π°ΠΊΠΈΠ΄ΡΠ²Π°Π΅ΠΌ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π² ΡΠΏΠΈΡΠΎΠΊ.ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΡ ΡΡΠΎΠ²Π΅Π½Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ (Π²Π·ΡΠ»ΠΈ ΠΈΠ· tmx ΠΊΠ°ΡΡΡ), Π° ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ
Clock clock;
while (window.isOpen())
{
float time = clock.getElapsedTime().asMicroseconds();
Β
clock.restart();
time = time / 800;
Β
Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (event.type == Event::MouseButtonPressed)//Π΅ΡΠ»ΠΈ Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ»Π°Π²ΠΈΡΠ° ΠΌΡΡΠΈ
if (event.key.code == Mouse::Left) //Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π»Π΅Π²Π°Ρ, ΡΠΎ ΡΡΡΠ΅Π»ΡΠ΅ΠΌ
{ //ΠΈ ΡΡΡ ΠΆΠ΅ ΡΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΌΡΡΠΈ Π² ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅
Vector2i pixelPos = Mouse::getPosition(window);//Π·Π°Π±ΠΈΡΠ°Π΅ΠΌ ΠΊΠΎΠΎΡΠ΄ ΠΊΡΡΡΠΎΡΠ°
Vector2f pos = window.mapPixelToCoords(pixelPos);//ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΠΌ ΠΈΡ Π² ΠΈΠ³ΡΠΎΠ²ΡΠ΅ (ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΎΡ ΠΊΠΎΠΎΡΠ΄ ΠΎΠΊΠ½Π°)
entities.push_back(new Bullet(BulletImage, «Bullet», lvl, p.x, p.y, 16, 16, pos.x, pos.y)); //ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΏΡΠ»ΠΈ. ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΏΡΠ»Ρ
shoot.play();//ΠΈΠ³ΡΠ°Π΅ΠΌ Π·Π²ΡΠΊ ΠΏΡΠ»ΠΈ
}
}
Β
for (it = entities.begin(); it != entities.end();)//Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΡΡΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌΡΡ ΠΎΡ Π½Π°ΡΠ°Π»Π° Π΄ΠΎ ΠΊΠΎΠ½ΡΠ°
{
Entity *b = *it;//Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ (*it)->
b->update(time);//Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Ρ-ΡΠΈΡ update Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΏΠΎ ΡΡΡΠΈ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΆΠΈΠ²)
if (b->life == false) { it = entities.erase(it); delete b; }// Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠ΅ΡΡΠ², ΡΠΎ ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ
else it++;//ΠΈ ΠΈΠ΄Π΅ΠΌ ΠΊΡΡΡΠΎΡΠΎΠΌ (ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ) ΠΊ ΡΠ»Π΅Π΄ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΡΠ°ΠΊ Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΡΠΏΠΈΡΠΊΠ°
}
Β
for (it = entities.begin(); it != entities.end(); it++)//ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎ ΡΠ»-ΡΠ°ΠΌ ΡΠΏΠΈΡΠΊΠ°
{
if (((*it)->name == «MovingPlatform») && ((*it)->getRect().intersects(p.getRect())))//Π΅ΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠΊ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠΏΠΈΡΠΊΠ° ΠΈ ΠΈΠΌΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° movingplatform
{
Entity *movPlat = *it;
if ((p.dy>0) || (p.onGround == false))//ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ³ΡΠΎΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΡΡΠΆΠΊΠ°, Ρ.Π΅ ΠΏΠ°Π΄Π°Π΅Ρ Π²Π½ΠΈΠ·
if (p.y + p.h<movPlat->y + movPlat->h)//Π΅ΡΠ»ΠΈ ΠΈΠ³ΡΠΎΠΊ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π²ΡΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Ρ.Π΅ ΡΡΠΎ Π΅Π³ΠΎ Π½ΠΎΠ³ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ (ΡΠΊ ΠΌΡ ΡΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ»ΠΈ ΡΡΠΎ ΠΎΠ½ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ)
{
p.y = movPlat->y — p.h + 3; p.x += movPlat->dx*time; p.dy = 0; p.onGround = true; // ΡΠΎ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ° ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΊΠ°ΠΊ Π±Ρ ΡΡΠΎΡΠ» Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅
}
}
Β
if (((*it)->name == «EasyEnemy») && ((*it)->getRect().intersects(p.getRect())))
{
////////Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ°Π³Π°
if ((*it)->dx>0)//Π΅ΡΠ»ΠΈ Π²ΡΠ°Π³ ΠΈΠ΄Π΅Ρ Π²ΠΏΡΠ°Π²ΠΎ
{
std::cout << «(*it)->x» << (*it)->x << «\n»;//ΠΊΠΎΠΎΡΠ΄ ΠΈΠ³ΡΠΎΠΊΠ°
std::cout << «p.x» << p.x << «\n\n»;//ΠΊΠΎΠΎΡΠ΄ Π²ΡΠ°Π³Π°
Β
(*it)->x = p.x — (*it)->w; //ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΎΡ ΠΈΠ³ΡΠΎΠΊΠ° Π²Π»Π΅Π²ΠΎ (Π²ΠΏΡΠΈΡΡΠΊ)
(*it)->dx = 0;//ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ
Β
std::cout << «new (*it)->x» << (*it)->x << «\n»;//Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠΎΡΠ΄ Π²ΡΠ°Π³Π°
std::cout << «new p.x» << p.x << «\n\n»;//Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠΎΡΠ΄ ΠΈΠ³ΡΠΎΠΊΠ° (ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΉ)
}
if ((*it)->dx < 0)//Π΅ΡΠ»ΠΈ Π²ΡΠ°Π³ ΠΈΠ΄Π΅Ρ Π²Π»Π΅Π²ΠΎ
{
(*it)->x = p.x + p.w; //Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ — ΠΎΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ Π²ΠΏΡΠ°Π²ΠΎ
(*it)->dx = 0;//ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ
}
///////Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ³ΡΠΎΠΊΠ°
if (p.dx < 0) { p.x = (*it)->x + (*it)->w; }//Π΅ΡΠ»ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π²ΡΠ°Π³ΠΎΠΌ ΠΈ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ΄Π΅Ρ Π²Π»Π΅Π²ΠΎ ΡΠΎ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ°
if (p.dx > 0) { p.x = (*it)->x — p.w; }//Π΅ΡΠ»ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π²ΡΠ°Π³ΠΎΠΌ ΠΈ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ΄Π΅Ρ Π²ΠΏΡΠ°Π²ΠΎ ΡΠΎ Π²ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌ ΠΈΠ³ΡΠΎΠΊΠ°
}
Β
for (it2 = entities.begin(); it2 != entities.end(); it2++)
{
if ((*it)->getRect() != (*it2)->getRect())//ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈ
if (((*it)->getRect().intersects((*it2)->getRect())) && ((*it)->name == «EasyEnemy») && ((*it2)->name == «EasyEnemy»))//Π΅ΡΠ»ΠΈ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ ΠΎΠ½ΠΈ Π²ΡΠ°Π³ΠΈ
{
(*it)->dx *= -1;//ΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ Π²ΡΠ°Π³Π°
(*it)->sprite.scale(-1, 1);//ΠΎΡΡΠ°ΠΆΠ°Π΅ΠΌ ΡΠΏΡΠ°ΠΉΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ
}
}
Β
}
Β
if (Keyboard::isKeyPressed(Keyboard::T)) { lvl.levelNumber++; return true; }
if (Keyboard::isKeyPressed(Keyboard::Tab)) { return true; }//Π΅ΡΠ»ΠΈ ΡΠ°Π±, ΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΈΠ³ΡΡ
if (Keyboard::isKeyPressed(Keyboard::Escape)) { return false; }//Π΅ΡΠ»ΠΈ ΡΡΠΊΠ΅ΠΉΠΏ, ΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΠΈΠ³ΡΡ
Β
Β
Β
p.update(time);//ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ»ΠΈ ΡΡΠ΄Π° update ΠΈΠ³ΡΠΎΠΊΠ°
window.setView(view);
window.clear(Color(77, 83, 140));
lvl.Draw(window);
Β
Β
for (it = entities.begin(); it != entities.end(); it++){
window.draw((*it)->sprite);
}
window.draw(p.sprite);
window.display();
}
}
Β
void gameRunning(RenderWindow & window, int & numberLevel){//Ρ-ΡΠΈΡ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈΠ³ΡΡ , Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ
if (startGame(window,numberLevel)) { numberLevel++; gameRunning(window,numberLevel); }//ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Ρ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π°ΡΠ°ΡΡ ΠΈΠ³ΡΡ
}
Β
int main()
{
RenderWindow window(VideoMode(640, 480), «Lesson 33. kychka-pc.ru»);
int numberLevel = 1;//ΡΠ½Π°ΡΠ°Π»Π° 1-ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ
gameRunning(window,numberLevel);
return 0;
}
Π£ΡΠΎΠΊ 22 SFML C++ ΡΠ°Π±ΠΎΡΠ° Ρ Tiled Map Editor | kychka-pc
#ifndef LEVEL_H
#define LEVEL_H
Β
#include <string>
#include <vector>
#include <map>
#include <SFML/Graphics.hpp>
#include <iostream>
#include «TinyXML/tinyxml.h»
Β
struct Object
{
int GetPropertyInt(std::string name);//Π½ΠΎΠΌΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Π½Π°ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅
float GetPropertyFloat(std::string name);
std::string GetPropertyString(std::string name);
Β
std::string name;//ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ name ΡΠΈΠΏΠ° string
std::string type;//Π° Π·Π΄Π΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ type ΡΠΈΠΏΠ° string
sf::Rect<float> rect;//ΡΠΈΠΏ Rect Ρ Π½Π΅ΡΠ΅Π»ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ
std::map<std::string, std::string> properties;//ΡΠΎΠ·Π΄Π°ΡΠΌ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΊΠ»ΡΡ — ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΈΠΏ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ — ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ
Β
sf::Sprite sprite;//ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ ΡΠΏΡΠ°ΠΉΡ
};
Β
struct Layer//ΡΠ»ΠΎΠΈ
{
int opacity;//Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΡΠ»ΠΎΡ
std::vector<sf::Sprite> tiles;//Π·Π°ΠΊΠΈΠ΄ΡΠ²Π°Π΅ΠΌ Π² Π²Π΅ΠΊΡΠΎΡ ΡΠ°ΠΉΠ»Ρ
};
Β
class Level//Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ — ΡΡΠΎΠ²Π΅Π½Ρ
{
public:
bool LoadFromFile(std::string filename);//Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ false Π΅ΡΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ
Object GetObject(std::string name);
std::vector<Object> GetObjects(std::string name);//Π²ΡΠ΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Π² Π½Π°Ρ ΡΡΠΎΠ²Π΅Π½Ρ
std::vector<Object> GetAllObjects();//Π²ΡΠ΄Π°Π΅ΠΌ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Π½Π°Ρ ΡΡΠΎΠ²Π΅Π½Ρ
void Draw(sf::RenderWindow &window);//ΡΠΈΡΡΠ΅ΠΌ Π² ΠΎΠΊΠ½ΠΎ
sf::Vector2i GetTileSize();//ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°
Β
private:
int width, height, tileWidth, tileHeight;//Π² tmx ΡΠ°ΠΉΠ»Π΅ width height Π² Π½Π°ΡΠ°Π»Π΅,Π·Π°ΡΠ΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΠΉΠ»Π°
int firstTileID;//ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π°ΠΉΠ΄ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
sf::Rect<float> drawingBounds;//ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ°ΡΡΠΈ ΠΊΠ°ΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌ
sf::Texture tilesetImage;//ΡΠ΅ΠΊΡΡΡΡΠ° ΠΊΠ°ΡΡΡ
std::vector<Object> objects;//ΠΌΠ°ΡΡΠΈΠ² ΡΠΈΠΏΠ° ΠΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ
std::vector<Layer> layers;
};
Β
///////////////////////////////////////
Β
Β
int Object::GetPropertyInt(std::string name)//Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π² Π½Π°ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅
{
return atoi(properties[name].c_str());
}
Β
float Object::GetPropertyFloat(std::string name)
{
return strtod(properties[name].c_str(), NULL);
}
Β
std::string Object::GetPropertyString(std::string name)//ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠΌΡ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ.Π²ΡΠΎΠ΄Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ
{
return properties[name];
}
Β
bool Level::LoadFromFile(std::string filename)//Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ-ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΊΠ»Π°ΡΡΠ° Π²Π½Π΅ ΠΊΠ»Π°ΡΡΠ°
{
TiXmlDocument levelFile(filename.c_str());//Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠ°ΠΉΠ» Π² TiXmlDocument
Β
// Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ XML-ΠΊΠ°ΡΡΡ
if (!levelFile.LoadFile())//Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΊΠ°ΡΡΡ
{
std::cout << «Loading level \»» << filename << «\» failed.» << std::endl;//Π²ΡΠ΄Π°Π΅ΠΌ ΠΎΡΠΈΠ±ΠΊΡ
return false;
}
Β
// ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ map
TiXmlElement *map;
map = levelFile.FirstChildElement(«map»);
Β
// ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΡΡΡ: <map version=»1.0″ orientation=»orthogonal»
// tilewidth=»34″ tileheight=»34″>
width = atoi(map->Attribute(«width»));//ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΈΠ· Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΡ Π΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°
height = atoi(map->Attribute(«height»));//ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°Π²Π°Π»ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π²
tileWidth = atoi(map->Attribute(«tilewidth»));//ΡΠ°ΠΉΠ»ΠΌΠ°ΠΏ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅
tileHeight = atoi(map->Attribute(«tileheight»));
Β
// ΠΠ΅ΡΠ΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΡΠ΅ΡΠ° ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
TiXmlElement *tilesetElement;
tilesetElement = map->FirstChildElement(«tileset»);
firstTileID = atoi(tilesetElement->Attribute(«firstgid»));
Β
// source — ΠΏΡΡΡ Π΄ΠΎ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ image
TiXmlElement *image;
image = tilesetElement->FirstChildElement(«image»);
std::string imagepath = image->Attribute(«source»);
Β
// ΠΏΡΡΠ°Π΅ΠΌΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ°ΠΉΠ»ΡΠ΅Ρ
sf::Image img;
Β
if (!img.loadFromFile(imagepath))
{
std::cout << «Failed to load tile sheet.» << std::endl;//Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ°ΠΉΠ»ΡΠ΅Ρ-Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ
return false;
}
Β
Β
img.createMaskFromColor(sf::Color(255, 255, 255));//Π΄Π»Ρ ΠΌΠ°ΡΠΊΠΈ ΡΠ²Π΅ΡΠ°.ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅Ρ ΠΌΠ°ΡΠΊΠΈ
tilesetImage.loadFromImage(img);
tilesetImage.setSmooth(false);//ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅
Β
// ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ»Π±ΡΠΎΠ² ΠΈ ΡΡΡΠΎΠΊ ΡΠ°ΠΉΠ»ΡΠ΅ΡΠ°
int columns = tilesetImage.getSize().x / tileWidth;
int rows = tilesetImage.getSize().y / tileHeight;
Β
// Π²Π΅ΠΊΡΠΎΡ ΠΈΠ· ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (TextureRect)
std::vector<sf::Rect<int>> subRects;
Β
for (int y = 0; y < rows; y++)
for (int x = 0; x < columns; x++)
{
sf::Rect<int> rect;
Β
rect.top = y * tileHeight;
rect.height = tileHeight;
rect.left = x * tileWidth;
rect.width = tileWidth;
Β
subRects.push_back(rect);
}
Β
// ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠ»ΠΎΡΠΌΠΈ
TiXmlElement *layerElement;
layerElement = map->FirstChildElement(«layer»);
while (layerElement)
{
Layer layer;
Β
// Π΅ΡΠ»ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ opacity, ΡΠΎ Π·Π°Π΄Π°Π΅ΠΌ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΡΠ»ΠΎΡ, ΠΈΠ½Π°ΡΠ΅ ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅ΠΏΡΠΎΠ·ΡΠ°ΡΠ΅Π½
if (layerElement->Attribute(«opacity») != NULL)
{
float opacity = strtod(layerElement->Attribute(«opacity»), NULL);
layer.opacity = 255 * opacity;
}
else
{
layer.opacity = 255;
}
Β
// Β ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ <data>
TiXmlElement *layerDataElement;
layerDataElement = layerElement->FirstChildElement(«data»);
Β
if (layerDataElement == NULL)
{
std::cout << «Bad map. No layer information found.» << std::endl;
}
Β
// Β ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ <tile> — ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ
TiXmlElement *tileElement;
tileElement = layerDataElement->FirstChildElement(«tile»);
Β
if (tileElement == NULL)
{
std::cout << «Bad map. No tile information found.» << std::endl;
return false;
}
Β
int x = 0;
int y = 0;
Β
while (tileElement)
{
int tileGID = atoi(tileElement->Attribute(«gid»));
int subRectToUse = tileGID — firstTileID;
Β
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ TextureRect ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
if (subRectToUse >= 0)
{
sf::Sprite sprite;
sprite.setTexture(tilesetImage);
sprite.setTextureRect(subRects[subRectToUse]);
sprite.setPosition(x * tileWidth, y * tileHeight);
sprite.setColor(sf::Color(255, 255, 255, layer.opacity));
Β
layer.tiles.push_back(sprite);//Π·Π°ΠΊΠΈΠ΄ΡΠ²Π°Π΅ΠΌ Π² ΡΠ»ΠΎΠΉ ΡΠΏΡΠ°ΠΉΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²
}
Β
tileElement = tileElement->NextSiblingElement(«tile»);
Β
x++;
if (x >= width)
{
x = 0;
y++;
if (y >= height)
y = 0;
}
}
Β
layers.push_back(layer);
Β
layerElement = layerElement->NextSiblingElement(«layer»);
}
Β
// ΡΠ°Π±ΠΎΡΠ° Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ
TiXmlElement *objectGroupElement;
Β
// Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ»ΠΎΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
if (map->FirstChildElement(«objectgroup») != NULL)
{
objectGroupElement = map->FirstChildElement(«objectgroup»);
while (objectGroupElement)
{
// Β ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ <object>
TiXmlElement *objectElement;
objectElement = objectGroupElement->FirstChildElement(«object»);
Β
while (objectElement)
{
// ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ — ΡΠΈΠΏ, ΠΈΠΌΡ, ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΈ ΡΠ΄
std::string objectType;
if (objectElement->Attribute(«type») != NULL)
{
objectType = objectElement->Attribute(«type»);
}
std::string objectName;
if (objectElement->Attribute(«name») != NULL)
{
objectName = objectElement->Attribute(«name»);
}
int x = atoi(objectElement->Attribute(«x»));
int y = atoi(objectElement->Attribute(«y»));
Β
int width, height;
Β
sf::Sprite sprite;
sprite.setTexture(tilesetImage);
sprite.setTextureRect(sf::Rect<int>(0, 0, 0, 0));
sprite.setPosition(x, y);
Β
if (objectElement->Attribute(«width») != NULL)
{
width = atoi(objectElement->Attribute(«width»));
height = atoi(objectElement->Attribute(«height»));
}
else
{
width = subRects[atoi(objectElement->Attribute(«gid»)) — firstTileID].width;
height = subRects[atoi(objectElement->Attribute(«gid»)) — firstTileID].height;
sprite.setTextureRect(subRects[atoi(objectElement->Attribute(«gid»)) — firstTileID]);
}
Β
// ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
Object object;
object.name = objectName;
object.type = objectType;
object.sprite = sprite;
Β
sf::Rect <float> objectRect;
objectRect.top = y;
objectRect.left = x;
objectRect.height = height;
objectRect.width = width;
object.rect = objectRect;
Β
// «ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅» ΠΎΠ±ΡΠ΅ΠΊΡΠ°
TiXmlElement *properties;
properties = objectElement->FirstChildElement(«properties»);
if (properties != NULL)
{
TiXmlElement *prop;
prop = properties->FirstChildElement(«property»);
if (prop != NULL)
{
while (prop)
{
std::string propertyName = prop->Attribute(«name»);
std::string propertyValue = prop->Attribute(«value»);
Β
object.properties[propertyName] = propertyValue;
Β
prop = prop->NextSiblingElement(«property»);
}
}
}
Β
Β
objects.push_back(object);
Β
objectElement = objectElement->NextSiblingElement(«object»);
}
objectGroupElement = objectGroupElement->NextSiblingElement(«objectgroup»);
}
}
else
{
std::cout << «No object layers found…» << std::endl;
}
Β
return true;
}
Β
Object Level::GetObject(std::string name)
{
// ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ
for (int i = 0; i < objects.size(); i++)
if (objects[i].name == name)
return objects[i];
}
Β
std::vector<Object> Level::GetObjects(std::string name)
{
// Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ
std::vector<Object> vec;
for (int i = 0; i < objects.size(); i++)
if (objects[i].name == name)
vec.push_back(objects[i]);
Β
return vec;
}
Β
Β
std::vector<Object> Level::GetAllObjects()
{
return objects;
};
Β
Β
sf::Vector2i Level::GetTileSize()
{
return sf::Vector2i(tileWidth, tileHeight);
}
Β
void Level::Draw(sf::RenderWindow &window)
{
// ΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ (ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ ΡΠΈΡΡΠ΅ΠΌ!)
for (int layer = 0; layer < layers.size(); layer++)
for (int tile = 0; tile < layers[layer].tiles.size(); tile++)
window.draw(layers[layer].tiles[tile]);
}
Β
#endif
Π£ΡΠΎΠΊ 11 SFML ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ° Ρ ΠΊΠ°ΡΡΠΎΠΉ | kychka-pc
#include <SFML/Graphics.hpp>
#include <iostream>
#include «map.h»
#include «view.h»
using namespace sf;
Β
Β
Β
////////////////////////////////////////////////////ΠΠΠΠ‘Π‘ ΠΠΠ ΠΠΠ////////////////////////
class Player {
private: float x, y ;
public:
float w, h, dx, dy, speed ;
int dir;
String File;
Image image;
Texture texture;
Sprite sprite;
Player(String F, float X, float Y, float W, float H){
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β dx=0; dy=0; speed=0; dir =0;
File = F;
w = W; h = H;
image.loadFromFile(«images/» + File);
image.createMaskFromColor(Color(41, 33, 59));
texture.loadFromImage(image);
sprite.setTexture(texture);
x = X; y = Y;
sprite.setTextureRect(IntRect(0, 0, w, h));
}
void update(float time)
{
switch (dir)
{
case 0: dx = speed; dy = 0; break;
case 1: dx = -speed; dy = 0; break;
case 2: dx = 0; dy = speed; break;
case 3: dx = 0; dy = -speed; break;
}
Β
x += dx*time;
y += dy*time;
Β
speed = 0;
sprite.setPosition(x,y);
interactionWithMap();//Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΡΡ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΊΠ°ΡΡΠΎΠΉ
}
Β
Β
void interactionWithMap()//Ρ-ΡΠΈΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠ°ΡΡΠΎΠΉ
{
Β
for (int i = y / 32; i < (y + h) / 32; i++)//ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎ ΡΠ°ΠΉΠ»ΠΈΠΊΠ°ΠΌ, ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈΡΡΡΡΠΈΠΌ Ρ ΠΈΠ³ΡΠΎΠΊΠΎΠΌ,, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊΠ°ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° 32*32, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠΊΡΠ°ΡΠΈΠ²Π°Π»ΠΈ Π² 9 ΡΡΠΎΠΊΠ΅. ΠΏΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ ΡΠΈΡΠ°ΠΉΡΠ΅ Π½ΠΈΠΆΠ΅.
for (int j = x / 32; j<(x + w) / 32; j++)//ΠΈΠΊΡ Π΄Π΅Π»ΠΈΠΌ Π½Π° 32, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π»Π΅Π²ΡΠΉ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊ, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆ ΡΠΎΠΏΡΠΈΠΊΠ°ΡΠ°Π΅ΡΡΡ. (ΠΎΠ½ Π²Π΅Π΄Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° 32*32, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°Ρ ). Π j<(x + w) / 32 — ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΠΎ ΠΈΠΊΡΡ. ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΏΡΠΈΠΊΠ°ΡΠ°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΌ. ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ΄Π΅ΠΌ Π² ΡΠΈΠΊΠ»Π΅ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ ΠΏΠΎ ΠΈΠΊΡΡ, ΠΏΡΠΎΡ ΠΎΠ΄Ρ ΠΏΠΎ ΠΎΡ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° (ΡΠΎΠΏΡΠΈΠΊΠ°ΡΠ°ΡΡΠ΅Π³ΠΎΡΡ Ρ Π³Π΅ΡΠΎΠ΅ΠΌ), Π΄ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ° (ΡΠΎΠΏΡΠΈΠΊΠ°ΡΠ°ΡΡΠ΅Π³ΠΎΡΡ Ρ Π³Π΅ΡΠΎΠ΅ΠΌ)
{
if (TileMap[i][j] == ‘0’)//Π΅ΡΠ»ΠΈ Π½Π°Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ 0 (ΡΡΠ΅Π½Π°), ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ «Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΡΠΎΡΡΠΈ» ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°:
{
if (dy>0)//Π΅ΡΠ»ΠΈ ΠΌΡ ΡΠ»ΠΈ Π²Π½ΠΈΠ·,
{
y = i * 32 — h;//ΡΠΎ ΡΡΠΎΠΏΠΎΡΠΈΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈΠ³ΡΠ΅ΠΊ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°. ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ²Π°Π΄ΡΠ°ΡΠΈΠΊΠ° Π½Π° ΠΊΠ°ΡΡΠ΅(ΡΡΠ΅Π½Ρ) ΠΈ Π·Π°ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ°Π΅ΠΌ ΠΈΠ· Π²ΡΡΠΎΡΡ ΡΠΏΡΠ°ΠΉΡΠ° ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°.
}
if (dy<0)
{
y = i * 32 + 32;//Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Ρ Ρ ΠΎΠ΄ΡΠ±ΠΎΠΉ Π²Π²Π΅ΡΡ . dy<0, Π·Π½Π°ΡΠΈΡ ΠΌΡ ΠΈΠ΄Π΅ΠΌ Π²Π²Π΅ΡΡ (Π²ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΠ°ΠΈΠ½ΡΠ°)
}
if (dx>0)
{
x = j * 32 — w;//Π΅ΡΠ»ΠΈ ΠΈΠ΄Π΅ΠΌ Π²ΠΏΡΠ°Π²ΠΎ, ΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π₯ ΡΠ°Π²Π½Π° ΡΡΠ΅Π½Π° (ΡΠΈΠΌΠ²ΠΎΠ» 0) ΠΌΠΈΠ½ΡΡ ΡΠΈΡΠΈΠ½Π° ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ°
}
if (dx < 0)
{
x = j * 32 + 32;//Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΈΠ΄Π΅ΠΌ Π²Π»Π΅Π²ΠΎ
}
}
Β
if (TileMap[i][j] == ‘s’) { //Π΅ΡΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ΡΠ°Π²Π΅Π½ ‘s’ (ΠΊΠ°ΠΌΠ΅Π½Ρ)
x = 300; y = 300;//ΠΊΠ°ΠΊΠΎΠ΅ ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅… Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅Π»Π΅ΠΏΠΎΡΡΠ°ΡΠΈΡ Π³Π΅ΡΠΎΡ
TileMap[i][j] = ‘ ‘;//ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΠ°ΠΌΠ΅Π½Ρ, ΡΠΈΠΏΠ° Π²Π·ΡΠ»ΠΈ Π±ΠΎΠ½ΡΡ. ΠΌΠΎΠΆΠ΅ΠΌ ΠΈ Π½Π΅ ΡΠ±ΠΈΡΠ°ΡΡ, ΠΊΡΡΠ°ΡΠΈ.
}
}
}
Β
float getplayercoordinateX(){
return x;
}
float getplayercoordinateY(){
return y;
}
};
Β
Β
Β
int main()
{
RenderWindow window(sf::VideoMode(640, 480), «Lesson 11. kychka-pc.ru»);
Β
Β
view.reset(sf::FloatRect(0, 0, 640, 480));
Β
Image map_image;
map_image.loadFromFile(«images/map.png»);
Texture map;
map.loadFromImage(map_image);
Sprite s_map;
s_map.setTexture(map);
Β
Player p(«hero.png», 250, 250, 96.0, 96.0);
Β
float CurrentFrame = 0;
Clock clock;
Β
while (window.isOpen())
{
Β
float time = clock.getElapsedTime().asMicroseconds();
clock.restart();
time = time / 800;
Β
Β
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
Β
float coordinatePlayerX, coordinatePlayerY = 0;
coordinatePlayerX = p.getplayercoordinateX();
coordinatePlayerY = p.getplayercoordinateY();
Β
///////////////////////////////////////////Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΡΠΎΠ½Π°ΠΆΠ΅ΠΌ Ρ Π°Π½ΠΈΠΌΠ°ΡΠΈΠ΅ΠΉ////////////////////////////////////////////////////////////////////////
if (Keyboard::isKeyPressed(Keyboard::Left)) {
p.dir = 1; p.speed = 0.1;
CurrentFrame += 0.005*time;
if (CurrentFrame > 3) CurrentFrame -= 3;
p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 96, 96, 96));
}
Β
if (Keyboard::isKeyPressed(Keyboard::Right)) {
p.dir = 0; p.speed = 0.1;
CurrentFrame += 0.005*time;
if (CurrentFrame > 3) CurrentFrame -= 3;
p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 192, 96, 96));
}
Β
if (Keyboard::isKeyPressed(Keyboard::Up)) {
p.dir = 3; p.speed = 0.1;
CurrentFrame += 0.005*time;
if (CurrentFrame > 3) CurrentFrame -= 3;
p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 288, 96, 96));
}
Β
if (Keyboard::isKeyPressed(Keyboard::Down)) {
p.dir = 2; p.speed = 0.1;
CurrentFrame += 0.005*time;
if (CurrentFrame > 3) CurrentFrame -= 3;
p.sprite.setTextureRect(IntRect(96 * int(CurrentFrame), 0, 96, 96));
}
getplayercoordinateforview(coordinatePlayerX, coordinatePlayerY);
p.update(time);
Β
Β
window.setView(view);
window.clear();
Β
/////////////////////////////Π ΠΈΡΡΠ΅ΠΌ ΠΊΠ°ΡΡΡ/////////////////////
for (int i = 0; i < HEIGHT_MAP; i++)
for (int j = 0; j < WIDTH_MAP; j++)
{
if (TileMap[i][j] == ‘ ‘)Β Β s_map.setTextureRect(IntRect(0, 0, 32, 32));
if (TileMap[i][j] == ‘s’)Β Β s_map.setTextureRect(IntRect(32, 0, 32, 32));
if ((TileMap[i][j] == ‘0’)) s_map.setTextureRect(IntRect(64, 0, 32, 32));
Β
s_map.setPosition(j * 32, i * 32);
Β
window.draw(s_map);
}
Β
Β
window.draw(p.sprite);
window.display();
}
Β
return 0;
}
Π‘Π΅ΡΠ΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ (SFML / Learn / 2.5.1 ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ)
ΠΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅ΡΡ, ΡΡΠΈΠ»ΠΈΡΡ ΠΈ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (HTTP, FTP).
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ …
ΠΠ»Π°ΡΡΡ | |
class | sf :: Ftp |
FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: Http |
HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: IpAddress |
ΠΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π°Π΄ΡΠ΅Ρ IPv4.ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: Packet |
Π‘Π»ΡΠΆΠ΅Π±Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΏΠΎ ΡΠ΅ΡΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: Socket |
ΠΠ°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² ΡΠΎΠ·Π΅ΡΠΎΠΊ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: SocketSelector |
ΠΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΈΡΠ°ΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ².ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: TcpListener |
Π‘ΠΎΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠ΅ TCP-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: TcpSocket |
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» TCP. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
class | sf :: UdpSocket |
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» UDP.ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ … | |
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅ΡΡ, ΡΡΠΈΠ»ΠΈΡΡ ΠΈ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (HTTP, FTP).
.
Π½ΠΎΠ²Π΅ΠΉΡΠΈΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² sfml — qaru
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
.