Как сделать карту в sfml

Обновлено: 08.07.2024

Итак, я пытаюсь создать базовый графический интерфейс с помощью sfml, и мне нужна полоса прокрутки для прокрутки цикла чертежей. После исследования я узнал, что это можно сделать с помощью манипулирования представлением. У меня есть прямоугольник для контура, который я пытаюсь использовать в качестве представления, и я настроил саму панель, мне просто нужно изменить представление. Моя проблема в том, что я не рисую ничего, что помещаю в представление. Если он ничего не рисует в представлении, его трудно прокрутить. Любая помощь приветствуется, спасибо.

Ты всю жизнь ощущал, что мир не в порядке. Странная мысль, но её не отогнать. Она — как заноза в мозгу. Она сводит с ума, не дает покоя. Это и привело тебя ко мне… Примешь синюю таблетку — и сказке конец. Ты проснешься в своей постели и поверишь, что это был сон. Примешь красную таблетку — войдешь в страну чудес. Я покажу тебе, насколько глубока библиотека SFML кроличья нора.

Круги

Предлагаю для начала потренироваться на простых геометрических фигурах типа Михаила круга. В этом деле большую помощь нам окажет класс CircleShape:

конструктор данного класса принимает в качестве параметра радиус нашей будущей фигуры (например, circle(50.f) );

закрасить фигуру можно с помощью метода setFillColor() , который очень похож на уже знакомый нам метод window.clear() ;

ну и для отображения круга в окне используется метод window.draw() .

Результат выполнения программы:


Наша фигура может иметь контур. Для его создания используется метод setOutlineThickness(), а для цвета контура — setOutlineColor():

Результат выполнения программы:


Как уже знаем из предыдущего урока, при закрашивании фигур или фона можно еще указать значение прозрачности. Например, строкой setOutlineColor(Color(80, 220, 50, 150)) мы устанавливаем 150 в качестве значения прозрачности контура:


А теперь с помощью строки setOutlineColor(Color(80, 220, 50, 50)) мы установим 50 в качестве значения прозрачности контура:


Вы уже наверняка заметили, что наш круг выходит за границы окна, а это не совсем хорошо. Нужно его немного подвинуть, а поможет нам в этом метод move():

Результат выполнения программы:


Регулярные полигоны

-Welcome to the real world!

Отлично! Сейчас мы рассмотрим, как нарисовать и другие фигуры. Теперь ты готов узнать истину. Она заключается в том, что, на самом деле, ложки не существует, Нео твой круг — это немножко не круг, а многоугольник. Да-да, самый обычный многоугольник с большИм количеством вершин. Всё дело в том, что у конструктора класса CircleShape есть еще и второй параметр (помимо радиуса), который отвечает за количество вершин у создаваемой фигуры, и он по умолчанию равен 30 . Именно при значениях близких к 30, многоугольник становится мало отличимым от круга. В то же время, задавая этот параметр самостоятельно, мы можем получить абсолютно другие геометрические элементы. Не трудно догадаться, что 3 вершины — это треугольник, 4 вершины — квадрат, 5 вершин — пятиугольник, ну а 8 вершин — восьмиугольник (октагон).

Ниже приведен полный код матрицы программы, которая наглядно покажет создание данных фигур:

Я понимаю, что могу уже создать мини-карту, изменив объект представления, как обрисовано в общих чертах здесь, но то, что я хочу вместо этого, является маленьким прямоугольником, у которого будут коробка или стрела, представляющая игрока и другие цветные коробки, которые представляют врагов или различные объекты. Есть ли лучший способ сделать, это, чем просто создает объект Мини-карты, который вычисляет, где каждый враг - и переводит это на представительный объект (коробка, стрела.. и т.д.), который тогда оттянут к экрану?

Это - общий вопрос больше, чем что-нибудь, таким образом, я действительно не ожидаю пример кода, даже при том, что он очень ценился бы. Я обрисовываю в общих чертах мини-класс сопоставления теперь, и я загружу его здесь скоро.

Дорогие коллеги, такой вопрос. Стоит ли тратить время на написание игры с помощью графической библиотеки SFML и собственного недодвижка для создания игрушки уровня Don't Starve? Есть ли от этого какой-то Профит или лучше не заниматься фигнёй и пойти изучать реальные движки?

если хочется делать игру то изучать реальные движки, если цель просто ковыряться в чем то - SFML

sfml имеет смысл освоить перед тем, как писать свой велосипед. если цель — написание игры, то, наверное, и смысла нет на него смотреть. если цель — исследовательское велосипедостроение, то вполне есть смысл.

Nodthar1107
SFML вроде лишь для создания окна, инициализации контекста, загрузки и вывода картинок и аудио
Т.е. низший уровень, на движок остается AI, pathfind итд, 3D тоже там нет

SFML это инициализация окна и ввода. Там нет ничего.

lookid
Там есть дофига еще кроме окна и ввода.

Nodthar1107
> для создания игрушки уровня Don't Starve

Поверишь или нет, но планку ты взял очень большую.

И раз ты всё таки игру упоминаешь, бери однозначно движок.
Например Годо - там и кресты есть (хотя с них не рекомендуется начинать),
если sfml вдохновляет. Кресты есть и в UE - но это явный оверкил.

Поясню свои мотивы. По моим представлениям многие компании используют свой собственный движок. С точки зрения получения опыта думаю, что, наверное, это норм идея. SFML планирую использовать только для отрисовки графики и воспроизведения аудио. Представление о различных паттернах имею, значит так или иначе смогу сделать рабочую машину. Вопрос только есть ли в этом смысл с точки зрения моего развития как геймдевелопера? А, ну и пишу я на плюсах. Просто SFML предоставляет ещё такие возможности как обработка системных событий вроде захвата клавиш. А самостоятельно я пока увы такую задачу решить не могу.

А почему именно SFML, а не SDL?

Nodthar1107
Есть еще чуть более высокоуровневые движки вроде Irrlicht, Ogre, у них есть такие сущности как камера, сцена и т.д.

Dimich
SFML представляет собой объектную модель в отличие от SDL, поверх которой необходимо будет писать собственную обертку. Вообще про SDL мало что знаю на самом деле. По SFML куча различных уроков и видосов, и в освоении библиотека очень проста. Ну и SFML в принципе первая библиотека, на которую я наткнулся, и она мне схожу понравилась

Nodthar1107
Если 2D - сойдет SFML, если же нужно 3D - бери движок, там уже есть камера, загрузка моделей, расчет света и тени итд
> SFML представляет собой объектную модель в отличие от SDL
И его надо линковать статически или DLL должна быть собранна тем же компилером с теми же настройками
> Вообще про SDL мало что знаю на самом деле
Там, если что, знать ненадо, он простой и узнается по ходу использования

Dimich
> А почему именно SFML, а не SDL?
например, потому что менеджмент ресурсов в 2021 без RAII — это зашквар

lookid
> SFML это инициализация окна и ввода. Там нет ничего.
вообще-то там есть всё что угодно начиная от шейдеров, заканчивая звуком и сетью.

Nodthar1107
> Представление о различных паттернах имею
> А, ну и пишу я на плюсах.
Тут дело нечисто.

Nodthar1107
> Ну и SFML в принципе первая библиотека, на которую я наткнулся, и она мне схожу
> понравилась
Если хочешь хардкорчика, то делай на винапи и вулкане. А если хочешь максимальный уровень сложности, то ещё пиши свою std и либу векторов и матриц.

nes
> Есть еще чуть более высокоуровневые движки вроде Irrlicht, Ogre
Чё уж мелочиться, взять уж UE сразу))

Продолжаю пополнять плейлист советами по маппингу.


Награда даёт автору 200 очк. Steam. Выдано 1 пользователем.


" data-tooltip-class="reaction_award_hover"> 1


Награда даёт автору 100 очк. Steam. Выдано 1 пользователем.


" data-tooltip-class="reaction_award_hover"> 1


2,155 уникальных посетителей
109 добавили в избранное




Ниже приведены ссылки на полезные видео.
В них разбираются всевозможные интересные и полезные фишки для картостроителей.
Если вы чего-то не знали, или с чем-то у вас возникали трудности (в том числе с идеями) - то добро пожаловать на мой канал.
Больше видео у меня на КАНАЛЕ, в частности в ПЛЕЙЛИСТЕ.
Надеюсь, для кого-то данный контент будет полезен.

Читайте также: