Ведите дневник о том, как Вы развиваетесь в сфере программирования и не только Читайте дневники других – пользуйтесь общим опытом, идеями и советами
Архивы: Справочники
История создания моей первой игры
Расскажите историю создания Вашей первой игры, покажите нам скриншоты, дайте нам поиграть)) Или быть может Вы захотите выпустить серию уроков, которая позволит другим сделать похожую игру
Блог участников
Здесь Вы можете вести дневник на различные темы. Например о стадиях разработки Вашей игры. Или о том, что Вы сегодня сделали, как развиваетесь и тд. Я думаю, что, возможно, это многих мотивирует больше вкладываться в знания и свои цели
p.s. главное создавайте все записи соответственно разделу , а если раздела нет – создавайте раздел )
Уроки от legozaur
Контактные данные:
– 3ollegator@mail.ru
– kychka-pc.ru
– ВК
Разработка 2D Игр
В данном разделе будут появляться уроки по созданию 2D игр.
FAQ
Ответы на самые часто задаваемые вопросы и решение самых популярных проблем
Сюда можно посылать людей с форума, если такой ответ уже есть.
SFML и Linux
Введение
Этот урок первый который вы должны прочитать если используете SFML на Linux. Здесь описано как установить SFML и скомпилировать проект который его использует.
Установка SFML
Есть несколько способов установить SFML на Linux:
- Установка из репозитория вашего дистрибутива
- Загрузить скомпилированный SDK и вручную скопировать файлы
- Загрузить исходники, скомпилировать и установить
Первый способ предпочтительнее; если версия SFML которую вы хотите установить доступна в официальном репозитории , значит установите SFML используя ваш пакетный менеджер . К примеру, в Debian вы должны выполнить следующую команду:
1 |
sudo apt-get install libsfml-dev |
Option 3 requires more work: you need to ensure all of SFML’s dependencies including their development headers are available, make sure CMake is installed, and manually execute some commands. This will result in a package which is tailored to your system.
If you want to go this way, there’s a dedicated tutorial on building SFML yourself.
Finally, option 2 is a good choice for quick installation if SFML is not available as an official package. Download the SDK from thedownload page, unpack it and copy the files to your preferred location: either a separate path in your personal folder (like/home/me/sfml), or a standard path (like /usr/local).
If you already had an older version of SFML installed, make sure that it won’t conflict with the new version!
Компиляция SFML программы
In this tutorial we’re not going to talk about IDEs such as Code::Blocks or Eclipse. We’ll focus on the commands required to compile and link an SFML executable. Writing a complete makefile or configuring a project in an IDE is beyond the scope of this tutorial — there are better dedicated tutorials for this.
If you’re using Code::Blocks, you may refer to the Code::Blocks tutorial for Windows; many things should be similar. You won’t have to set the compiler and linker search paths if you installed SFML to one of your system’s standard paths.
First, create a source file. For this tutorial we’ll name it “main.cpp”. Put the following code inside the main.cpp file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); 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; } |
Now let’s compile it:
1 |
g++ -c main.cpp |
In case you installed SFML to a non-standard path, you’ll need to tell the compiler where to find the SFML headers (.hpp files):
1 |
g++ -c main.cpp -I<em><sfml-install-path></em>/include |
Here, <sfml-install-path> is the directory where you copied SFML, for example /home/me/sfml.
You must then link the compiled file to the SFML libraries in order to get the final executable. SFML is made of 5 modules (system, window, graphics, network and audio), and there’s one library for each of them.
To link an SFML library, you must add “-lsfml-xxx” to your command line, for example “-lsfml-graphics” for the graphics module (the “lib” prefix and the “.so” extension of the library file name must be omitted).
1 |
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system |
If you installed SFML to a non-standard path, you’ll need to tell the linker where to find the SFML libraries (.so files):
1 |
g++ main.o -o sfml-app -L<em><sfml-install-path></em>/lib -lsfml-graphics -lsfml-window -lsfml-system |
We are now ready to execute the compiled program:
1 |
./sfml-app |
If SFML is not installed in a standard path, you need to tell the dynamic linker where to find the SFML libraries first by specifying LD_LIBRARY_PATH:
1 |
export LD_LIBRARY_PATH=<em><sfml-install-path></em>/lib && ./sfml-app |
If everything works, you should see this in a new window:
Работа со временем – Handling time
Время в SFML
В отличие от многих других библиотек, где время представляется в uint32 (unsigned int – без знаковое целое) миллисекунд, или в float (число с плавающей точкой) секунд, SFML не дает каких-либо конкретных ед. измерения или типов для задания значения времени. Вместо этого он позволяет пользователю выбирать самому с помощью гибкого класса: sf::Time
. Все классы и функции SFML, которые управляют значениями времени используют этот класс.
sf::Time
представляет период времени (время между двумя событиями). Это не класс, который представляет нынешний год / месяц / день / час / минуты / секунды, как метки времени — это просто значение, представляющее собой определенное количество времени, и как интерпретировать это зависит от контекста, в котором Это использовано.
Преобразование времени
Значение sf::Time
может быть представлено в виде: секунд, миллисекунд и микросекунд. Существует функция, не являющаяся членом sf::Time,
включения каждого из этих видов :
1 2 3 |
sf::Time t1 = sf::microseconds(10000); sf::Time t2 = sf::milliseconds(10); sf::Time t3 = sf::seconds(0.01f); |
Следует отметить, что все три значения равны.
Аналогичным образом, sf::Time
может быть преобразовано обратно в секунды, либо миллисекунды или микросекунды:
1 2 3 4 5 |
sf::Time time = ...; sf::Int64 usec = time.asMicroseconds(); sf::Int32 msec = time.asMilliseconds(); float sec = time.asSeconds(); |
Играя со значениями времени
sf::Time
это просто количество времени, поэтому оно поддерживает арифметические операции, такие как сложение, вычитание, сравнение и т. д. Время также может быть отрицательным.
1 2 3 4 5 6 7 |
sf::Time t1 = ...; sf::Time t2 = t1 * 2; sf::Time t3 = t1 + t2; sf::Time t4 = -t3; bool b1 = (t1 == t2); bool b2 = (t3 > t4); |
Время измерения
Теперь, когда мы знаем, как управлять значениями времени в SFML, давайте посмотрим, как сделать то, в чем нуждается почти каждая программа: измерим сколько времени прошло.
SFML имеет очень простой класс для измерения времени: sf::Clock
. Он имеет только две функции: getElapsedTime, чтобы извлечь время, прошедшее с начала создания объекта класса sf::Clock
, и restart, чтобы перезапустить часы.
1 2 3 4 5 6 7 8 |
sf::Clock clock; // создать объект clock ... sf::Time elapsed1 = clock.getElapsedTime(); std::cout << elapsed1.asSeconds() << std::endl; clock.restart(); ... sf::Time elapsed2 = clock.getElapsedTime(); std::cout << elapsed2.asSeconds() << std::endl; |
Обратите внимание, что restart возвращает также прошедшее время, так что вы можете избежать небольшой разрыв времени, который существовал бы, если бы вам пришлось вызвать getElapsedTime явно перед повторным запуском.
Вот пример, который использует время, прошедшее на каждой итерации цикла игры, чтобы обновить игровую логику:
1 2 3 4 5 6 7 |
sf::Clock clock; while (window.isOpen()) { sf::Time elapsed = clock.restart(); updateGame(elapsed); ... } |
Системный модуль – System Module
Перевод официальной документации SFML
Советы
Различные советы, касающиеся программирования, разработки игр, sfml и прочих подобных вещей