Блог Sinsinmin

2016.02.09

Начну с идеи. Пока ещё посмотрел 20 уроков. Поэтому сначала уроки, потом практика)).

Идея. Тестовая игра. Персонаж.

У персонажа есть уровень. От 1 до 10. Здоровье. Атака. Скорость регенерации жизней. Броня. 

4 уровня. На каждом уровне по 1-му виду мобов. 

В каждом уровне есть босс, которого с начальными параметрами персонажа убить нельзя. Как только босс убит, то возможно перейти на уровень 2. Переход между уровнями сделать возможным. 

Ну можно для прикола сделать 5-ую комнату с супер сильным босом. Зашёл и отгрёб сразу. )))

С каждым уровнем игроку будут даваться очки атрибутов. Который игрок может вкладывать в увеличение параметров Атаки, Брони, Регенерации жизней, здоровья. Наверное можно украсть идею у игры Комбатс. 

Значит Атака, Ловкость, Интуиция, Выносливость. Но тут уже сложнее. Больше формул придётся делать. Поэтому пусть это будет расширенный вариант. Как грится для премиум подписечников…

Можно добавить как раз интерфейс. А значит возможность сохраняться. Это наверное будет нечто вроде записи в файл? А лучше в некий шифрованный файл чтобы пользователь не смог поставить себе некие читерские значения. Обычно в варКрафт 3 давался некий длинный код. Его записываешь. И потом вводишь в начале игры и получаешь сохранённого персонажа. Но тогда можно делиться кодами. Ну ладно. Это уже будет более защищено)))).

Итак соберём всё в кучу и глянем ещё раз….

Интерфейс(Начать игру, загрузить игру-возможность загрузки, сохранить игру-возможность сохранения, опции экрана-разрешение, выход)

5 карт. 4 врага, 5 боссов. (9 тайлов с врагами, 1 с персонажем) хм…можно сделать вначале выбор Персонажа. М и Ж. А значит всего нужно 11 тайлов

5 Карт. Общих по сути.

Карты:

Нужно продумать идею карты. А она будет зависеть от того каким образом сражается персонаж. Стрелять?Ну как то не знаю. Хотя для начала так проще. Подходить близко и драться на мечах?)))

Во)) ещё вспомнил. Сделать на каждом уровне два вида врагов. Одни пассивные. Другие агрессивные. Блин это нечто вроде стратегии чтоле. Вид сверху. Да наверное вид сверху. А значит нечто вроде Рагнарок.

Точно. Посмотрел видео рангарока. Можно сделать также как там. А значит можно добавить некую массовую магию. Все враги в определённом радиусе получают урон. Возможно даже скачать тайлы рагнарока. Если найду. А нет то какие будут. Ну и отрисовку врагов сделать  на подобии. Очень понравилось как там сделано. Вроде 2d как раз игра. 

Блин. Но тогда нужно будет делать более расширенную версию. Больше мобов. Разные оружия. Во я влип))))))))) Есть смайлик слёз?))))

Пфф…итого

Делаю что то наподобии рагнарока. Ну точнее буду копировать идеи оттуда. Из видео. А значит карта больше. Количество врагов больше. 

Добавить броню оружие?А чо…может буду спрайты с одетой бронёй. Кто знает. Но работы конечно …ёмаё….зато обучусь многому))))))

Итак…не знаю осилю ли…но на мой взгляд уроков Павла должно хватить для реализации идеи.

Ах да при достижении уровня нужна анимация. 

И продумать как будет показываться урон при нанесении врагу или врагом. 

Также интерфейс. что на нём отображать.

8 степеней движения. За раз только одну. Без прыжков. 

Надо выделить идеи основные жирным, а то так замучаюсь собирать в кучу всё.

 

А ещё))) ещё…с вашей помощью можно замутить 6-ого босса, которого можно убить только с другом по сети)))))))))

upd:

Враги-движение. Раз в несколько секунд, вычисляется рандомно направление и дальность движения от к пример 10 до 20. И враг движется туда. 

У агрессивных врагов должна быть область видимости. Если игрок вошёл в эту область, то враг нападает на игрока

 

upd1: http://sprites.technoized.com/view/sprite/ro

Буду благодарен, если поделитесь:

sf::TcpSocket

Ссылка на оригинальную статью

Специализированный Soket использующий TCP протокол.
#include <TcpSocket.hpp>
Диаграмма наследования для sf::TcpSocket:


Открытые типы


enum Status { Done, NotReady, Partial, Disconnected, Error }
Статус коды, которые могут быть возвращены функциями сокета. Ещё…
enum { AnyPort = 0 }
Некоторые специальные значения, используемые сокетами. Ещё…

Открытые функций (public functions)


TcpSocket ()
конструктор по умолчанию. Ещё…
unsigned short getLocalPort () const
Получить порт, с которому сокет локально связан. Ещё…
IpAddress getRemoteAddress () const
Получить адрес подключенного сверстника. Ещё…
unsigned short getRemotePort () const
Получить порт присоединённого узла, к которому подключен разъем. Ещё…
Status connect (const IpAddress &remoteAddress, unsigned short remotePort, Time timeout=Time::Zero)
Подключите разъем к удаленному узлу. Ещё…
void disconnect ()
Отключите разъем от его удаленного узла. Ещё…
Status send (const void *data, std::size_t size)
Отправить исходные данные удаленному узлу. Ещё…
Status send (const void *data, std::size_t size, std::size_t &sent)
Отправить исходные данные удаленному узлу. Ещё…
Status receive (void *data, std::size_t size, std::size_t &received)
Получите исходные данные из удаленного узла. Ещё…
Status send (Packet &packet)
Отправить форматированный пакет данных удаленному узлу. Ещё…
Status receive (Packet &packet)
Получить форматированный пакет данных из удаленного узла. Ещё…
void setBlocking (bool blocking)
Установите блокирующий состояние сокета. Ещё…
bool isBlocking () const
Находится ли сокет в блокирующем режиме или неблокирующем. Ещё…




Защищённые типы (protected types)


enum Type { Tcp, Udp }
Типы протоколов, которые гнездо может использовать. Ещё…

Защищённые функции (protected functions)


 

SocketHandle getHandle () const
Вернуться внутреннюю ручку в гнездо. Ещё…
void create ()
Создайте внутреннее представление сокета. Ещё…
void create (SocketHandle handle)
Создайте внутреннее представление сокета с ручкой гнезда. Ещё…
void close ()
Закрыть гнездо изящно. Ещё…

 

 

Буду благодарен, если поделитесь:

sf::CircleShape – круг

Ссылка на оригинальную статью

Специализированная форма, представляющая круг.
#include
Диаграмма наследования для sf::CircleShape:


Публичные функции (public function)


CircleShape (float radius=0, std::size_t pointCount=30)
Конструктор по умолчанию.
Default constructor.
void setRadius (float radius)
Установите радиус окружности.
Set the radius of the circle.
float getRadius () const
Получить радиус окружности.
Get the radius of the circle.
void setPointCount (std::size_t count)
Установите количество точек окружности.
Set the number of points of the circle.
virtual std::size_t getPointCount () const
Получить количество точек окружности.
Get the number of points of the circle.
virtual Vector2f getPoint (std::size_t index) const
Получить точки окружности.
Get a point of the circle.
void setTexture (const Texture *texture, bool resetRect=false)
Изменение источника текстуру формы.
Change the source texture of the shape.
void setTextureRect (const IntRect &rect)
Установите суб-прямоугольник текстурой, которая будет отображать форму.
Set the sub-rectangle of the texture that the shape will display.
void setFillColor (const Color &color)
Установите цвет заливки формы.
Set the fill color of the shape.
void setOutlineColor (const Color &color)
Установите цвет контура фигуры.
Set the outline color of the shape.
void setOutlineThickness (float thickness)
Установите толщину фигуры контур.
Set the thickness of the shape’s outline.
const Texture * getTexture () const
Получить исходный текстуру формы.
Get the source texture of the shape.
const IntRect & getTextureRect () const
Получить суб-прямоугольник текстуры, отображаемой формы.
Get the sub-rectangle of the texture displayed by the shape.
const Color & getFillColor () const
Получить цвет заливки формы.
Get the fill color of the shape.
const Color & getOutlineColor () const
Получить цвет контура фигуры.
Get the outline color of the shape.
float getOutlineThickness () const
Получить толщину контура фигуры.
Get the outline thickness of the shape.
FloatRect getLocalBounds () const
Получить местный ограничивающий прямоугольник объекта.
Get the local bounding rectangle of the entity.
FloatRect getGlobalBounds () const
Получить глобального (не минимальный) прямоугольник сущности.
Get the global (non-minimal) bounding rectangle of the entity.
void setPosition (float x, float y)
Установить положение объекта.
set the position of the object
void setPosition (const Vector2f &position)
Установить положение объекта.
set the position of the object
void setRotation (float angle)
Установить ориентацию объекта.
set the orientation of the object
void setScale (float factorX, float factorY)
Установить масштабные коэффициенты объекта.
set the scale factors of the object
void setScale (const Vector2f &factors)
Установить масштабные коэффициенты объекта.
set the scale factors of the object
void setOrigin (float x, float y)
Установки локального происхождение объекта.
set the local origin of the object
void setOrigin (const Vector2f &origin)
Установки локального происхождение объекта.
set the local origin of the object
const Vector2f & getPosition () const
Получить позицию объекта.
get the position of the object
float getRotation () const
Получить ориентацию объекта.
get the orientation of the object
const Vector2f & getScale () const
Получить текущий масштаб объекта.
get the current scale of the object
const Vector2f & getOrigin () const
Получить местное происхождение объекта.
get the local origin of the object
void move (float offsetX, float offsetY)
Перемещение объекта по заданному смещению.
Move the object by a given offset.
void move (const Vector2f &offset)
Перемещение объекта по заданному смещению.
Move the object by a given offset.
void rotate (float angle)
Поверните объект.
Rotate the object.
void scale (float factorX, float factorY)
Масштаб объекта.
Scale the object.
void scale (const Vector2f &factor)
Масштаб объекта.
Scale the object.
const Transform & getTransform () const
Получить комбинированный преобразование объекта.
get the combined transform of the object
const Transform & getInverseTransform () const
Получить обратную комбинированной преобразование объекта.
get the inverse of the combined transform of the object




Защищённые функции


void update ()
Пересчитать внутреннюю геометрию формы.
Recompute the internal geometry of the shape.

Подробное описание


Специализированная форма, представляющая круг.

Этот класс наследует все функции sf::Transformable (позиция, вращение, масштаб, границы, …) а также функции sf::Shape (контур, цвет, текстура, …).

Пример использования:

Поскольку видеокарта не может привлечь идеальные круги, мы должны подделывать их из нескольких треугольников, соединенных друг с другом. Свойстве “количество точек” sf::CircleShape определяет, сколько из этих треугольников в использовании, и, следовательно, определяет качество круга.

Число точек также может быть использован для другой цели; с небольшими числами можно создать любую регулярную форму многоугольника: равносторонний треугольник, квадрат, пятиугольник, шестиугольник, …

Смотрите также
sf::Shape, sf::RectangleShape, sf::ConvexShape

Определение в соответствии с 41 файлом CircleShape.hpp.


Документация: Конструктор и Деструктор


sf::CircleShape::CircleShape(float radius = 0, std::size_t pointCount = 30)
Конструктор по умолчанию.Параметры:
radius – радиус окружности
pointCount – Кол-во точек сочиняющих круг

Документация: функции


const Color& sf::Shape::getFillColor () const
Получить цвет заливки формы.Возвращает
Цвет заполненной формы
Смотри также
setFillColor
FloatRect sf::Shape::getGlobalBounds () const
Получить глобального (не минимальный) прямоугольник сущности.Возвращенный прямоугольник в глобальных координатах, что означает, что он принимает во внимание преобразования (трансляция, вращение, масштабирование, …), которые применяются к объекту. Другими словами, эта функция возвращает границы формы в системе координат глобального 2D мира.Эта функция не обязательно возвращает минимальный ограничивающий прямоугольник. Это всего лишь гарантирует, что возвращаемый прямоугольник охватывает все вершины (но, возможно, больше). Это позволяет быстро аппроксимировать границы в качестве первого чека; Вы можете использовать более точные проверки на вершине.
Возвращает
     Глобальный ограничивающий прямоугольник сущности.
const Transform& sf::Transformable::getInverseTransform ( ) const
получить обратную комбинированной преобразование объектаВозвращает
Обратная комбинированных преобразований применяется к объекту
Смотрите также
setTransform

 

FloatRect sf::Shape::getLocalBounds ( ) const
Получить местный ограничивающий прямоугольник объекта.Возвращенный прямоугольник в локальных координатах, что означает, что он игнорирует преобразования (перемещение, вращение, масштабирование, …), которые применяются к объекту. Другими словами, эта функция возвращает границы лица в системе координат предприятия.Возвращает
Местное ограничивающий прямоугольник лица

 

const Vector2f& sf::Transformable::getOrigin () const
получить местное происхождение объектаВозвращает
Текущий происхождения
Смотрите также
setOrigin

 

const Color& sf::Shape::getOutlineColor ( ) const
Получить цвет контура фигуры.Возвращает
Цвет контура формы
Смотрите также
setOutlineColor

 

 float sf::Shape::getOutlineThickness ( ) const
Получить толщину контура фигуры.Возвращает
Толщина План форме
Смотрите также
setOutlineThickness

 

 virtual Vector2f sf::CircleShape::getPoint ( std::size_t index ) const
Получить точки окружности.Возвращенный Дело в локальных координатах, то есть, форма преобразования (положение, вращение, масштабирование), не принимаются во внимание. Результат не определен, если индекс вне допустимого диапазона.Параметры
     index –  индекс точки полученный в диапазоне [0 .. getPointerCount () -1]
Возвращает
Индексы точек формы
Осуществляет sf::Shape.
 virtual std::size_t sf::CircleShape::getPointCount ( ) const
Получить количество точек окружности.Возвращает
Количество точек окружности
Смотрите также
setPointCount
Осуществляет sf::Shape.
 const Vector2f& sf::Transformable::getPosition ( ) const
 получить позицию объектаВозвращает
Текущая позиция
Смотрите также
GetPosition
 float sf::CircleShape::getRadius ( ) const
Получить радиус окружности.Возвращает
Радиус окружности
Смотрите также
setRadius
 float sf::Transformable::getRotation ( ) const
получить ориентацию объектаВращение всегда находится в диапазоне [0, 360].Возвращает
Текущий вращение, в градусах
Смотрите также
setRotation
 const Vector2f& sf::Transformable::getScale ( ) const
получить текущий масштаб объектаВозвращает
Текущие масштабные коэффициенты
Смотрите также
setScale
 const Texture* sf::Shape::getTexture ( ) const
Получить исходный текстуру формы.Если форма не имеет источника текстуру, указатель NULL, возвращается. Возвращенный указатель строительства, что означает, что вы не можете изменить текстуру, когда вы извлекаете его с помощью этой функции.Возвращает
Указатель текстуры фигуры
Смотрите также
SetTexture
 const IntRect& sf::Shape::getTextureRect ( ) const
Получить суб-прямоугольник текстуры, отображаемой форме.Возвращает
Текстура прямоугольник формы
Смотрите также
setTextureRect
 const Transform& sf::Transformable::getTransform ( ) const
получить комбинированный преобразование объектаВозвращает
Transform объединения положение / вращение / масштабирование /            происхождение объекта
Смотрите также
getInverseTransform
 void sf::Transformable::move ( float offsetX, float offsetY )
Перемещение объекта по заданному смещению.Эта функция добавляет к текущему положению объекта, в отличие от SetPosition который переписывает его.Таким образом, это равносильно следующему коду:

Параметры
offsetX – Смещение по оси X
offsetY – Смещение по оси Y
Смотрите также
SetPosition

 

 void sf::Transformable::move ( const Vector2f & offset )
 Перемещение объекта по заданному смещению.
Эта функция добавляет к текущему положению объекта, в отличие от GetPosition который переписывает его.Таким образом, это равносильно следующему коду:

Параметры
offset – смещение
Смотрите также
SetPosition
void sf::Transformable::rotate ( float angle )
Поверните объект.Эта функция добавляет к текущему вращения объекта, в отличие от которого setRotation перезаписывает.Таким образом, это равносильно следующему коду:

Параметры
angle – угол поворота в градусах
 void sf::Transformable::scale ( float factorX, float factorY )
Масштаб объекта.Эта функция умножает текущий масштаб объекта, в отличие от setScale который переписывает его.Таким образом, это равносильно следующему коду:

параметры
factorX – горизонтальный масштабный коэффициент
factorY – вертикальный масштабный коэффициент
Смотрите также
setScale
void sf::Transformable::scale ( const Vector2f & factor )
Масштаб объекта.Эта функция умножает текущий масштаб объекта, в отличие от setScale который переписывает его.Таким образом, это равносильно следующему коду:

Параметры
factor – масштабный фактор
Смотрите также
setScale
void sf::Shape::setFillColor ( const Color & color )
Установите цвет заливки формы.Этот цвет модуляцией (умножается) с текстурой форма, если таковые имеются. Он может быть использован, чтобы раскрашивание форму, или изменить свое глобальное непрозрачность. Вы можете использовать sf::Color::Transparent чтобы сделать внутреннюю часть формы прозрачной, и есть план в одиночку. По умолчанию, цвет заливки формы является непрозрачный белый.Параметры
color – новый цвет формы
Смотрите также
getFillColor, setOutlineColor
void sf::Transformable::setOrigin ( float x, float y )
установки локального происхождение объектаПроисхождение объекта определяет центральную точку для всех преобразований (позиция, масштаб, вращение). Координаты этой точки должны быть по отношению к левом верхнем углу объекта, и игнорировать все преобразования (положение, масштаб, поворот). По умолчанию происхождения из трансформируемой объекта (0, 0).Параметры
x – координата Х нового происхождения
y – координата Y нового происхождения
Смотрите также
getOrigin
void sf::Transformable::setOrigin ( const Vector2f & origin )
установки локального происхождение объектаПроисхождение объекта определяет центральную точку для всех преобразований (позиция, масштаб, вращение). Координаты этой точки должны быть по отношению к левом верхнем углу объекта, и игнорировать все преобразования (положение, масштаб, поворот). По умолчанию происхождения из трансформируемой объекта (0, 0).Параметры
origin – новое происхождение
Смотрите также
getOrigin

 

void sf::Shape::setOutlineColor ( const Color & color )
Установите цвет контура фигуры.По умолчанию, цвет контура форма является непрозрачный белый.Параметры
color – новый цвет контура формы
Смотрите также
getOutlineColor, setFillColor
 void sf::Shape::setOutlineThickness ( float thickness )
становите толщину контура формы.Следует отметить, что отрицательные значения разрешены (так, чтобы контур расширяется к центру формы), и с помощью нуль отключает схему. По умолчанию, толщина наброски 0.Параметры
thickness – новая толщина наброски
Смотрите также
getOutlineThickness
 void sf::CircleShape::setPointCount ( std::size_t count )
 Установите количество точек окружности.Параметры
count –  новый номер точки окружности
Смотрите также
getPointerCount
 void sf::Transformable::setPosition ( float x, float y )
установить положение объектаЭта функция полностью переписывает предыдущую позицию.
Смотри функцию move, чтобы применить смещение на основе предыдущей позиции.
Положение трансформируемого объекта по умолчанию  (0, 0).Параметры
x – координата Х новой позиции
y – координата Y новой позиции
Смотрите также
move, getPosition
 void sf::Transformable::setPosition ( const Vector2f & position )
 установить положение объектаЭта функция полностью переписывает предыдущую позицию.
Смотри функцию move, чтобы применить смещение на основе предыдущей позиции.
Положение по умолчанию трансформируемой объекта (0, 0).

Параметры
position – новая позиция
Смотрите также
move, getPosition

 void sf::CircleShape::setRadius ( float radius )
Установите радиус окружности.Параметры
radius – новый радиус окружности
Смотрите также
getRadius
 void sf::Transformable::setRotation ( float angle )
установить ориентацию объектаЭта функция полностью переписывает предыдущий поворот. Смотрите функцию вращения, чтобы добавить угол, основанный на предыдущей ротации вместо этого. Вращение по умолчанию трансформируемой объекта 0.

Параметры
angle – новая ориентация, в градусах
Смотрите также
rotate, getRotation

 void sf::Transformable::setScale ( float factorX, float factorY )
установить масштабные коэффициенты объектаЭта функция полностью переписывает предыдущий масштаб. Смотрите функцию масштабирования, чтобы добавить фактор, основанный на предыдущем масштабе вместо этого. Масштаб трансформируемого объекта по умолчанию  (1, 1).

Параметры
factorX – новый горизонтальный коэффициент масштаба
factorY – новый вертикальный коэффициент масштаба
Смотрите также
scale, getScale

 void sf::Transformable::setScale ( const Vector2f & factors )
 установить масштабные коэффициенты объектаЭта функция полностью переписывает предыдущий масштаб. Смотрите функцию масштабирования, чтобы добавить фактор, основанный на предыдущем масштабе вместо этого. Масштаб трансформируемого объекта по умолчанию  (1, 1).

Параметры
factors – новый коэффициент масштаба
Смотрите также
scale, getScale

 void sf::Shape::setTexture ( const Texture * texture, bool resetRect = false )
Изменение источника текстуры формы.Аргумент текстуры относится к текстуре, которые должны существовать до тех пор, пока форма использует его. Действительно, форма не хранит свою собственную копию текстуры, а хранит указатель на тот, который вы передали этой функции. Если источник текстуры разрушается и форма пытается использовать его, поведение не определено. текстура может быть NULL, чтобы отключить текстурирование. Если resetRect true, TextureRect собственностью форме автоматически подстроится под размер нового текстуры. Если оно false, текстура прямоугольник остается неизменным.

Параметры
texture – новая текстура
resetRect – если текстура прямоугольник другого размера, заменить?
Смотрите также
getTexture, setTextureRect

 void sf::Shape::setTextureRect ( const IntRect & rect )
Установите суб-прямоугольник текстурой, которая будет отображать форму.Текстура прямоугольник полезна, когда вы хотите отобразить только часть текстуры. По умолчанию, текстуры прямоугольник охватывает всю структуру.

Параметры
rect – прямоугольник, определяющий область текстуры для отображения
Смотрите также
getTextureRect, setTexture

 void sf::Shape::update ( )
Пересчитать внутреннюю геометрию формы.Эта функция должна быть вызвана производным классом каждый раз, когда есть изменение формы точки (т.е. результатом либо getPointerCount или getPoint отличается).

Документация для этого класса был создан из следующего файла:
CircleShape.hpp

Буду благодарен, если поделитесь:

sf::Image (Изображение)

Объявление:

1. Ширина и высота картинки

2. Сохранение картинки:

Подробности:
+ Если указать папку(images/) или подпапку(images/tileset/), то картинка будет сохранена в него.
? Если в папке уже есть картинка с таким именем, то она перезаписывается.
– Если папки не существует, картинка не сохранится.

3. Переворот по вертикали или горизонтали

Подробности:
+ flipHorizontally() поворачивает картинку слева направо, flipVertically() – с ног на голову
? Если сначала залить картинку в texture а потом в sprite, и после этого применить поворот, то картинка в повороте не будет изменена. надо перезагружать.

4. create (создание)

Подробности:
+ создаёт картинку размером 10 на 10, заданного цвета

5. createMaskFromColor (Создаёт прозрачность для данного цвета)

Подробности:
+ ищет на картинке все пиксели заданного цвета и задаёт им прозрачность

6. setPixel и getPixel

Подробности:
setPixel – заменяет пиксель с координатами X(2) и Y(1) на пиксель цвета sf::Color
getPixel – забирает в color цвет пикселя с координатами X(2) и Y(1)

7. copy (копирование)

Подробности:
копирует из image2 квадрат пикселей (x: от 20 до 40, y: от 0 до 60) и вставляет его в image1 со сдвигом по x(42) и y(42)
От 11.10.2016 – sf::Image image в которое вы копируете, должно быть обязательно задано через loadFromFile(…), либо через create(w,h).

Буду благодарен, если поделитесь:

Звук (sf::Sound)

Официальная документация класса sf::Sound (ENG)
Урок 29. Звуки и Музыка

Поподробнее о классе sf::Sound

1. Рассмотрим процесс создания двух одинаковых звуков.
Обычное объявление звука происходит следующим образом

А что если нам надо загрузить два одинаковых звука, и параллельно использовать их?
Сделаем вот так:

Велосипед? Ещё какой!

Как можно улучшить?
Попробуем вот так:

Велосипед? Ещё какой, но получше первого вот этим:
+ Вместо 2 buffer используется 1
+ Вместо 2 звуков загружаем 1
+ Сокращение строк кода на 2

Велосипед? Ещё какой, но получше второго вот этим:
+ Сокращение строк кода на 2
+ Наглядность кода
– жертва стилем

2. Повторение звука (setLoop)

setLoop(true); – включение повтора
setLoop(false); – отключение повтора
getLoop(); – возвращает состояние повтора

3. Громкость звука (setVolume)

setVolume(float) – устанавливает громкость звука (0 – нет звука, 100 – полная громкость)
setVolume(-100); – Громкость 0%
setVolume(0); – Громкость 0%
setVolume(50); – Громкость 50%
setVolume(100); – Громкость 100%
setVolume(200); – Громкость 100%
ВНИМАНИЕ! Звуковой интервал выходит за пределы 0 и 100.

Это можно проверить функцией getVolume().
getVolume(); – Возвращает текущую громкость, если она не ниже 0

4. Управление звуком
play(); – возобновить запись
pause(); – приостановить запись
stop(); – приостановить запись и вернуться в начало

Буду благодарен, если поделитесь:

Урок 2. mcText – многострочный цветной текст

Проблема: в SFML есть класс sf::Text который предоставляет возможность целиком окрасить текст только в один цвет.
Доп. проблема: многострочность текста.

Исходя из этих проблем, существовало два выхода:
1. Поискать в великом Интернете.
2. Писать самому.
Поиск в интернете дал один результат, но он годиться только для SFML2, поэтому пришлось велосипедить.

Потребность в подобном классе возникла при создании интерфейса для отображения описания артефактов в игровом окне.

Сейчас он выглядит примерно так:
img1
Данный класс не идеален и требует доработки, но в общих чертах он отражает суть решаемой проблемы.

Листинги класса mcText

Архив с исходными файлами и проектом
mcText_test

Буду благодарен, если поделитесь:

Keyboard

Краткое описание:
Мой класс Keyboard (на базе sf::Keyboard).
Назначение: отслеживает 4 состояния клавиши, предоставленной SFML
(sf::Keyboard перехватывает только состояния нажатой и не нажатой клавиши)
Как пользоваться:

0 – Клавиша не нажата
1 – Нажатие клавиши (pressed)
2 – Клавиша нажата
3 – Отжатие клавиши (released)

Исходный код:

Буду благодарен, если поделитесь:

Mouse

Краткое описание:
Мой класс Mouse (на базе sf::Mouse), который может отслеживать координаты мыши а так-же 4 состояния клавиш мыши.
Он нужен для того чтобы перехватывать моменты нажатия и отжатия клавиш мыши (SFML нам такие функции не предоставила)
Перехватить эти события можно функцией

Она анализирует конкретную клавишу мыши, и возвращает число int от 0 до 3, которые означают
0 – клавиша не нажата
1 – нажатие клавиши (pressed)
2 – клавиша нажата
3 – отжатие клавиши (released)
Очень полезный класс для перехвата событий мыши.

Пример: если произошло нажатие ЛКМ, вывести сообщение

Исходный код:

Функция main для регистрации событий ЛКМ

Функция main для регистрации координат курсора

Думаю, тут и так всё понятно.

Буду благодарен, если поделитесь:

Запуск приложения без консоли

Убираем консоль из SFML приложения, на примере Visual Studio 2015. Суть действий, в принципе, применима к любым версиям VS и CB.

Будет лучше, если вы имеете настроенный пресет (конфиг) для компиляции dynamic-debug или static-reliase версии.

В свойствах проекта, зайдите в диспетчер конфигураций:

Screenshot_3Здесь создайте копию рабочего пресета:

Screenshot_4

Это нужно для сохранения версии с консолью, рядом с релизом без нее.

В свойствах проекта выбираем скопированный пресет. Проходим в Компоновщик => система, параметр Подсистема меняем на “Windows (/SUBSYSTEM:WINDOWS)”.Screenshot_5Осталось подключить библиотеку sfml-main.lib. Компоновщик->дополнительные зависимости:

Screenshot_6

В случае fatal error LNK1120 или других ошибок, попробуйте пересоздать проект по одной из ссылок в начале статьи. Если не помогло, обратитесь с вопросом на форум.

https://kychka-pc.ru/Forum/topic/zapusk-prilozheniya-bez-konsolya

Буду благодарен, если поделитесь:

Пользовательские потоки данных – User data streams

Введение

SFML has several resource classes: images, fonts, sounds, etc. In most programs, these resources will be loaded from files, with the help of their loadFromFile function. In a few other situations, resources will be packed directly into the executable or in a big data file, and loaded from memory with loadFromMemory. These functions cover almost all the possible use cases — but not all.

Sometimes you want to load files from unusual places, such as a compressed/encrypted archive, or a remote network location for example. For these special situations, SFML provides a third loading function: loadFromStream. This function reads data using an abstract sf::InputStream interface, which allows you to provide your own implementation of a stream class that works with SFML.

In this tutorial you’ll learn how to write and use your own derived input stream.

Стандартные потоки?

Like many other languages, C++ already has a class for input data streams: std::istream. In fact it has two: std::istream is only the front-end, the abstract interface to the custom data is std::streambuf.

Unfortunately, these classes are not very user friendly, and can become very complicated if you want to implement non-trivial stuff. The Boost.Iostreams library tries to provide a simpler interface to standard streams, but Boost is a big dependency and SFML cannot depend on it.

That’s why SFML provides its own stream interface, which is hopefully a lot more simple and fast.

Класс InputStream

The sf::InputStream class declares four virtual functions:

read must extract size bytes of data from the stream, and copy them to the supplied data address. It returns the number of bytes read, or -1 on error.

seek must change the current reading position in the stream. Its position argument is the absolute byte offset to jump to (so it is relative to the beginning of the data, not to the current position). It returns the new position, or -1 on error.

tell must return the current reading position (in bytes) in the stream, or -1 on error.

getSize must return the total size (in bytes) of the data which is contained in the stream, or -1 on error.

To create your own working stream, you must implement every one of these four functions according to their requirements.

Классы FileInputStream и MemoryInputStream

Starting with SFML 2.3 two new classes have been created to provide streams for the new internal audio management.sf::FileInputStream provides the read-only data stream of a file, while sf::MemoryInputStream serves the read-only stream from memory. Both are derived from sf::InputStream and can thus be used polymorphic.

Использование класса InputStream

Using a custom stream class is straight-forward: instantiate it, and pass it to the loadFromStream (or openFromStream) function of the object that you want to load.

Примеры

If you need a demonstration that helps you focus on how the code works, and not get lost in implementation details, you could take a look at the implementation of sf::FileInputStream or sf::MemoryInputStream.

Don’t forget to check the forum and wiki. Chances are that another user already wrote a sf::InputStream class that suits your needs. And if you write a new one and feel like it could be useful to other people as well, don’t hesitate to share!

Распространенные ошибки

Some resource classes are not loaded completely after loadFromStream has been called. Instead, they continue to read from their data source as long as they are used. This is the case for sf::Music, which streams audio samples as they are played, and forsf::Font, which loads glyphs on the fly depending on the text that is displayed.

As a consequence, the stream instance that you used to load a music or a font, as well as its data source, must remain alive as long as the resource uses it. If it is destroyed while still being used, it results in undefined behavior (can be a crash, corrupt data, or nothing visible).

Another common mistake is to return whatever the internal functions return directly, but sometimes it doesn’t match what SFML expects. For example, in the sf::FileInputStream code, one might be tempted to write the seek function as follows:

This code is wrong, because std::fseek returns zero on success, whereas SFML expects the new position to be returned.

Буду благодарен, если поделитесь: