Урок 3. Загрузка текстуры, вывод картинки на экран. на примере создания персонажа. SFML

На этом уроке мы рассмотрим работу с текстурой на примере создания главного персонажа игры.

Приступим:)

Для начала нарисуйте персонажа сами, или скачайте на просторах интернета готового (png формат). Для себя я нашел такого вот

котика, можете поступить так же:

hero

 

Картинку с персонажем поместите в папку с проектом в директорию, где находится ваш файл исходного кода – main.cpp. Но лучше, если вы создадите папку images и поместите картинку туда. В больших проектах вам так будет удобнее. Я помещу картинку в папку images и мой путь , где лежит картинка, выглядит так : C:\Users\Павел\Documents\Visual Studio 2013\Projects\sfmltest\sfmltest\images\

Эта картинка называется тайлсет, а отдельный один кот на ней – тайл. почему много котов в разных ракурсах? чтобы сделать живого персонажа. Делается это перемещением прямоугольника. Например, если кот идёт в игре вправо – наш прямоугольник смещается вниз и пока мы идем вправо пробегается по трем котам в третьей строке. таким образом получается анимация.

Получается, что наш прямоугольник (rect) имеет свои размеры , в нашем случае размер одного кота мы узнаем позже.
Вся наша картинка с кучей котов (да хоть черных львов, как хотите) – называется текстурой (texture).
А результат, который выводится на экран в текущий момент времени в зависимости от действия персонажа – это спрайт (sprite).

 

давайте выведем всю картинку на экран:

Первый способ – создать объект изображения, загрузить в него файл, создать объект текстуры, передать в неё объект изображения, создать объект спрайт, передать в него объект текстуры.

(Советую код не копировать, а писать вручную)

Код выглядит следующим образом:

Всё новое (или обновленное) имеет комментарии, всё остальное осталось не тронутым (почему не тронутым? см. предыдущий урок )

Второй вариант – напрямую загрузить в текстуру. Функция загрузки “loadFromFile(“изображение”)” имеется и у объектов Текстур.

Каким из способов пользоваться? Зависит от задач. В первом случае у объекта Image есть функции, которых нет у Texture. Ну, например –

.createMaskFromColor(Color(0, 0, 0)); // Делает прозрачным, то есть убирает, нужный вам цвет в вашем изображении. Если бы кот был на синем фоне, а не прозрачном, как в нашем случае, то мы бы писали

createMaskFromColor(Color(0, 0, 255));

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

результат
результат

 

На этом уроке мы вывели картинку на экран, но в играх выводится по одному котику. Как вывести одного кота? Смотрите следующий урок

 

Буду благодарен, если поделитесь:
SFML вопросы, прошу, задавайте на форуме.
  1. Для начала спасибо за уроки, начинаю постигать SFML.

    По поводу урока хотел бы посоветовать сразу правильно учить работать с файлами и экономить память (я понимаю что на современных машинах её в избытке, но зачем зря тратить ресурсы?)

    Чтобы на загрузке файла не вылазила ошибка, лучше сразу отлавливать неудачную попытку загрузки файла. т.е. вместо

    лучше писать

    ну и про экономию памяти – после создания текстуры из картинки картинка становится ненужной и её вполне можно удалить.

    Но текстуру удалять нельзя, т.к. она используется дальше.

    В данном случае картинка, размером 16,5 килобайт съедает почти мегабайт памяти.

    Пойду читать дальше.

    1. Привет, большое спасибо за отзыв и полезный совет! :-)
      Я думаю можно отдельно сделать урок по экономии ресурсов подобным образом, чтобы каждый для себя решил и что-либо делал или не делал по этому поводу.
      Здесь же демонстрация возможностей библиотеки и какие-то идеи относительно разработки игр и геймплея.
      А то как оформлять, использовать ООП, экономию ресурсов и прочее.. Мне кажется такая информация в интернете итак в избытке. Но в целом урок про исключения и вобще ресурсы надо будет как-нибудь сделать. На форуме есть раздел – “решения и советы” , вы можете туда написать этот совет и прикрепить примерный код. Людям будет полезно увидеть.

  2. Приветствую.

    З.Ы. Огромное спасибо за ресурс!!!

    Остановился на 3 уроке :).

    Не могу открыть файл со Спрайтами:

    Failed to load image “images/chuvak.png”. Reason: Unable to open file

    Менял названия, папки, место положения – пока безрезультатно.

    Буду рад помощи.

  3. Привет! Урок отличный, продолжай в том же духе.
    Я столкнулся с такой проблемой: в Debug картинка загружается нормально, но вот в Release при запуске приложения выходит ошибка: ” Необработанное исключение в “0x0fd937ef” в “SFML_test.exe”: 0xC0000005: Нарушение прав доступа при чтении “0x676e702e”. ”
    В этой части кода(то есть при загрузке картинки):

    Помогите с этой проблемой.

Добавить комментарий