Создайте Платформер За 30 Минут

Привет! Сегодня мы напишем платформер с использованием C++, Box2D и SFML, а также редактор 2D-карт для игр.

Редактор плиточных карт .



Создайте платформер за 30 минут

Вот результат (карта создавалась 5 минут + во время съемки игра тормозила + экран не так сильно растягивался - дефект Бандикама): Исходники и exe находятся внизу статьи.



Что где когда?



Коробка2D
Эту библиотеку мы будем использовать для симуляции физики в платформере (столкновение с блоками, гравитация).

Возможно, не стоило использовать эту библиотеку только для блоков, но жить красиво не перестанешь ;) Почему Box2D? Потому что это самая распространенная и бесплатная физическая библиотека.



СФМЛ
Почему СФМЛ? Сначала я хотел использовать библиотеку SDL, но она очень ограничена в возможностях по сравнению с SFML, и мне пришлось бы много писать самому.

Спасибо автору SFML за экономию моего времени! Мы используем его для рисования графики

Редактор плиточных карт
Что здесь делает редактор тайловых карт? Вы когда-нибудь пробовали создавать карты для игр? Держу пари, что твоя первая карта была примерно такой.

Скрытый текст

  
  
   

1111111 1000001 1001001 1000011 1000111 1111111

Это довольно неэффективное решение! Гораздо лучше было бы написать что-то вроде редактора карт, но, оглядываясь назад, мы понимаем, что за 5 минут это не сделать, и приведенная выше «карта» вполне подойдет. Tiled Map Editor — один из таких редакторов карт. Это хорошо, потому что созданную в этом редакторе карту (состоящую из объектов, тайлов и их слоев) можно сохранить в XML-подобный файл .

tmx, а затем прочитать его с помощью специальной библиотеки C++.

Но обо всем по порядку.



Создание карты

Скачать TME с официального сайта сайт Создайте новую карту «Файл-> Создать.

»

Создайте платформер за 30 минут

Ориентация должна быть ортогональной (если вы не создаете изометрический платформер), а формат слоя должен быть XML, который мы и будем читать.

Кстати, в создаваемой карте нельзя изменить ни формат слоя, ни размер тайлов.



Плитка
Затем перейдите в «Карта-> Новый набор тайлов.

», загрузите наш набор тайлов:

Создайте платформер за 30 минут

В итоге у вас получится что-то вроде этого:

Создайте платформер за 30 минут

В чем смысл слоев плитки? Почти в каждой игре есть многослойные карты.

Первый слой - земля (лед, чернозем и т.д), второй слой - постройки (казармы, форт и т.д, фон прозрачный), третий - деревья (ель, пихта и т.д, фон тоже прозрачный) .

То есть сначала рисуется первый слой, поверх него наносится второй слой, а затем третий.

Процесс создания слоев запечатлен на следующих 4 скриншотах:

Создайте платформер за 30 минут



Создайте платформер за 30 минут



Создайте платформер за 30 минут

Список слоев:

Создайте платформер за 30 минут



Объекты
Что такое объект в TME? Объект имеет собственное имя, тип и параметры со значениями.

Эта панель отвечает за объекты

Создайте платформер за 30 минут

Вы можете легко узнать, что делает каждая кнопка, самостоятельно.

Теперь попробуем создать объект. Удаляем слой «Колобоша», а вместо него создаем слой объектов, например, с одноименным названием «Колобоша».

На панели объектов выберите «Вставить плиточный объект» (или можно выбрать любую фигуру — Форма), нажмите на плитку Колобоша и просто поместите объект в какое-нибудь место.

Затем щелкните правой кнопкой мыши по объекту и выберите «Свойства объекта.

».

Измените имя объекта на Колобоша.

Затем сохраните карту.

В целом в редакторах карт нет ничего сверхсложного.

Пришло время перейти к чтению карты.



Чтение карты

Создана отличная библиотека для чтения XML файлов.

КрошечныйXML , скачайте его исходники.

Создайте проект Visual Studio. Включите файлы TinyXML (или просто закиньте все эти файлы в проект, кроме xmltest.cpp :) ) Теперь подключаем SFML-включения и библиотеки в «Проект-> Свойства».

Если вы не знаете, как это сделать, добро пожаловать в Google. Создайте Level.h для карт

#ifndef LEVEL_H #define LEVEL_H #pragma comment(lib,"Box2D.lib") #pragma comment(lib,"sfml-graphics.lib") #pragma comment(lib,"sfml-window.lib") #pragma comment(lib,"sfml-system.lib") #include <string> #include <vector> #include <map> #include <SFML/Graphics.hpp>

Это начало файла.

Далее идет структура объекта

struct Object { int GetPropertyInt(std::string name); float GetPropertyFloat(std::string name); std::string GetPropertyString(std::string name); std::string name; std::string type; sf::Rect<int> rect; std::map<std::string, std::string> properties;

Теги: #gamedev #платформер #cplusplus #Tiled #C++ #Разработка игр

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.