что такое спрайт в играх

Спрайт (компьютерная графика)

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Эта статья нуждается в дополнительных источниках для улучшения проверяемости.
Вы можете помочь улучшить эту статью, добавив ссылки на авторитетные источники.
Не подтверждённая источниками информация может быть поставлена под сомнение и удалена.

Чаще всего — растровое изображение, свободно перемещающееся по экрану. [1] Наблюдение спрайта под несоответствующим углом приводит к разрушению иллюзии. То есть легче всего воспринимать спрайт как перемещающуюся в пространстве проекцию какого-то объёмного тела так, что разница незаметна.

Содержание

Происхождение термина

Слово «спрайт» придумал в 1970-е годы кто-то из Texas Instruments: их новая микросхема TMS9918 могла аппаратно отображать небольшие картинки поверх неподвижного фона. [2]

Спрайты в двухмерной графике

Изначально под спрайтами понимали небольшие рисунки, которые выводились на экран с применением аппаратного ускорения. На некоторых машинах (MSX 1, NES) программная прорисовка приводила к определённым ограничениям, а аппаратные спрайты этого ограничения не имели. Впоследствии с увеличением мощности центрального процессора, от аппаратных спрайтов отказались, и понятие «спрайт» распространилось на всех двумерных персонажей. В частности, в видеоиграх Super Mario и Heroes of Might and Magic вся графика спрайтовая.

CSS-спрайты

Применяются в вебе. Несколько изображений располагаются в одном графическом файле. Для того, чтобы вырезать из файла нужный кусок, применяется CSS — отсюда название технологии.

CSS-спрайты экономят трафик и ускоряют загрузку — браузеру потребуется запрашивать меньше файлов.

Спрайты в трёхмерной графике

Движки первого поколения

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

В первых трёхмерных играх, например, Wolfenstein 3D (1992) и Doom (1993), персонажи представлялись в виде двумерных рисунков, изменяющих размер в зависимости от расстояния.

На 3D-акселераторах

На 3D-акселераторах применяется такая техника: объект рисуется в виде плоскости с наложенной на неё текстурой с прозрачными областями. Эта технология применяется в трёх случаях.

Оптимизация

Спрайты могут применяться для оптимизации графического ядра, когда отрисовка трёхмерной детализованной модели слишком накладна и может привести к сильному падению скорости рендеринга. Таковыми являются:

Спецэффекты

Некоторые спецэффекты (например, огонь) выполняются спрайтами, так как полигональный огонь плохо смотрится. Сравните, например, взрывы в Quake 2 (рис. 2) и Unreal Tournament (рис. 3).

Для большей правдоподобности изображения используется большое количество сравнительно маленьких спрайтов (так называемая система частиц).

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Рисунок 1.
Спрайтовая публика в Rally Trophy

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Рисунок 4.
Живой актёр в трёхмерном кабинете в realMyst.

Живая съёмка

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

Стоит заметить, что в некоторых спрайтовых играх, таких, как Rise of the Triad, спрайты фотографировались с актёров, а не с моделей, игрушек или рисунков.

Появление шейдеров частично снимает потребность в живой съёмке — многие нюансы фотоизображения уже можно передать полигональными моделями в реальном времени.

Разрушение иллюзии

Наблюдение спрайта под несоответствующим углом приводит к разрушению иллюзии. В зависимости от математического аппарата рендеринга («движка»), разрушение может происходить двумя способами.

Источник

Библиотека Pygame / Часть 2. Работа со спрайтами

Библиотека Pygame / Часть 2. Работа со спрайтами

Вторая часть серии руководств « Разработка игр с помощью Pygame ». Она предназначена для программистов начального и среднего уровней, которые заинтересованы в создании игр и улучшении собственных навыков кодирования на Python. Начать стоит с урока: « Библиотека Pygame / Часть 1. Введение ».

Что такое спрайт?

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

Для загрузки и отрисовки спрайтов в случай этой игры их нужно добавить в разделы “Обновление” и “Визуализация” игрового цикла. Несложно представить, что если в игре много спрайтов, то цикл довольно быстро станет большим и запутанным. В Pygame для этого есть решение: группировка спрайтов.

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

Теперь этой возможностью можно воспользоваться, добавив группу целиком в цикл:

Создание спрайта

Можно переходить к созданию первого спрайта. В Pygame все спрайты выступают объектами. Если вы не работали с этим типом данных в Python, то для начала достаточно знать, что это удобный способ группировки данных и кода в единую сущность. Поначалу это может путать, но спрайты Pygame — отличная возможность попрактиковаться в работе с объектами и понять, как они работают.

Начнем с определения нового спрайта:

Дальше необходимо определить rect спрайта. Это сокращенное от rectangle (прямоугольник). Прямоугольники повсеместно используются в Pygame для отслеживания координат объектов. Команда get_rect() оценивает изображение image и высчитывает прямоугольник, способный окружить его.

rect можно использовать для размещения спрайта в любом месте. Начнем с создания спрайта по центру:

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

Движение спрайта

Это значит, что при каждом игровом цикле x-координата спрайта будет увеличиваться на 5 пикселей. Запустите программу, чтобы посмотреть, как он скрывается за пределами экрана, достигая правой стороны.

Исправить это можно, заставив спрайт двигаться по кругу — когда он добирается до правой стороны экрана, просто переносить его влево. Это легко сделать, используя элемент управления rect спрайта:что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Так, если левая сторона rect пропадает с экрана, просто задаем значение правого края равное 0:

Теперь можно видеть, как спрайт будто бы двигается по кругу.

Источник

Cocos2d-x — Работа со спрайтами

Предисловие

Эта статья является второй, из серии переводов документации к игровому движку Cocos2d-x. Если вы не видели первую часть перевода, то советую сначала ознакомится с ней:
Cocos2d-x — Основные понятия

А теперь продолжим!

Что такое спрайт

Создание спрайтов

Существуют различные способы создания спрайтов, зависящие от того что вам необходимо выполнить. Вы можете создать спрайт, используя изображения различных графических форматов, включая: PNG, JPEG, TIFF и другие. Давайте рассмотрим некоторые методы создания и поговорим о каждом из них.

Создание простого спрайта

Спрайт может быть создан путем указания файла изображения.

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Код выше создает спрайт, используя изображение mysprite.png. В результате, созданный спрайт использует целое изображение. Он имеет те же размеры, что и mysprite.png. Если файл изображения 200 x 200 то результирующий спрайт тоже будет 200 x 200.

Создание спрайта с использованием Rect (прямоугольника)

В предыдущем примере, созданный спрайт имел тот же размер, что оригинальное изображение. Если вы хотите создать спрайт использующий только часть файла изображения, вы можете сделать это путем указания прямоугольного участка – Rect.

Rect имеет 4 значения: origin x, origin y, width и height.

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Rect берет левый верхний угол за начало координат. Это противоположно тому принципу, что мы использовали, когда устанавливали позицию на экране, отчитывая координаты от левого нижнего угла. Таким образом, результирующий спрайт – только часть исходного файла изображения. В этом случае, размер спрайта 40 x 40 начиная от левого верхнего угла.

Если вы не зададите Rect, Cocos2d-x автоматически будет использовать полную высоту и ширину заданного изображения. Взгляните на код ниже. Если вы используете изображение с размерами 200 x 200, то следующие два выражения будут иметь одинаковые результаты.

Создание спрайта из текстурного атласа (Sprite Sheet)

Sprite sheet – это способ объединения спрайтов в один файл. Использование sprite sheet помогает добиться лучшей производительности, путем пакетной обработки вызовов рисования. Они могут также сохранить дисковую- и видео-память, если упаковать спрайты более эффективно (обычно требуются специальные инструменты). Вы прочитаете больше об этом в продвинутой главе, но это только один из многих стандартных методов повышения производительности игр.

При использовании sprite sheet, он сначала загружается в SpriteFrameCache. SpriteFrameCache – это класс кеширования, который сохраняет объекты SpriteFrame, для быстрого доступа к ним. SpriteFrame загружается один раз и сохраняется в SpriteFrameCache.

Вот пример sprite sheet:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Давайте рассмотрим подробнее, что происходит:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Как вы можете видеть, sprite sheet объединяет все спрайты в один файл и минимизирует лишнее пространство.

Загрузка Sprite Sheet

Вероятнее всего, вы будете осуществлять загрузку в AppDelegate:

Теперь, когда мы имеем текстурный атлас загруженный в SpriteFrameCache, мы можем создать спрайт.

Создание спрайта из SpriteFrameCache

Это создание спрайта, путем вытягивания его из SpriteFrameCache.

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Создание спрайта из SpriteFrame

Еще один способ создать такой же спрайт – получить SpriteFrame из SpriteFrameCache, и затем создать спрайт при помощи SpriteFrame. Пример:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Инструменты для создания Sprite Sheets

Создание sprite sheet вручную – утомительный процесс. К счастью, есть инструменты, которые могут генерировать их автоматически. Эти инструменты предлагают множество возможностей для максимальной оптимизации ваших спрайтов!

Здесь представлено несколько инструментов:

Манипуляции со спрайтами

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

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Опорная точка и позиция

Опорная точка (Anchor Point) – это точка, которую вы задаете, чтобы указать, какая часть спрайта будет использоваться, при установке его координат. Опорная точка влияет только на свойства связанные с трансформацией. Они включают: scale, rotation, skew. И не включают: color и opacity. Опорная точка использует систему координат от нижнего левого угла. Учитывайте это, при выполнении своих расчетов. По умолчанию, все Node объекты имеют стандартную опорную точку (0.5, 0.5).

Задать опорную точку просто:

Чтобы представить это визуально:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Свойства спрайтов, на которые влияет опорная точка

Использование опорной точки влияет только на свойства связанные с трансформированием. Такие как: scale, rotation, skew.

Position

Опорная точка влияет на позицию спрайта, поскольку именно эта точка используется в качестве основной при позиционировании. Давайте посмотрим, как это происходит. Обратите внимание на цветную линию, и то где находятся спрайты относительно ее. Важно отметить, что такой эффект был получен, лишь путем изменения опорной точки. Мы не использовали setPosition() для достижения этого:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Позицию спрайта можно также задать методом setPosition().

Rotation

Изменяет вращение спрайта, на положительное или отрицательное число градусов. Положительные значения поворачивают спрайт по часовой стрелке, в то время как отрицательные поворачивают против часовой стрелки. Стандартное значение – 0.0

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Scale

Изменяет масштаб спрайта, либо по каждой оси отдельно, либо равномерно по обеим. Стандартное значение – 1.0

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Изменяет наклон спрайта, либо отдельно по осям x и y, либо равномерно для всех. Стандартное значение – 0.0

Свойства спрайта, на которые не влияет опорная точка

Существует несколько свойств объекта Sprite, на которые не влияет опорная точка. Почему? Потому что они изменяют только внешний вид, подобно свойствам color и opacity.

Color

Изменяет цвет спрайта. Это делается при помощи Color3B. Мы еще не сталкивались с Color3B, но это просто объект, представляющий собой RGB цвет. RGB цвет включает в себя 3 значения (Red, Green, Blue), от 0 до 255. Cocos2d-x также предоставляет предопределенные цвета, из которых вы можете выбрать. Использование их будет немного быстрее, поскольку они уже определены заранее. Вот некоторые примеры:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Opacity

Изменяет непрозрачность спрайта на заданное значение. Это свойство принимает значения от 0 до 255, где 255 – полная не прозрачность, а 0 – абсолютная невидимость. Стандартное значение 255 (полная видимость).

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Полигональные спрайты

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

Зачем использовать полигональный спрайт?

Ответ прост — производительность!

Существует много технических терминов о скорости пиксельного заполнения, которые мы могли сюда вывалить, но вам просто нужно понять, что PolygonSprite рисуется на основе формы вашего спрайта, а не прямоугольника с избыточной площадью. Этот способ прорисовки, позволяет сэкономить на ненужной работе. Рассмотрим пример:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Заметили различия между левой и правой версиями?

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

Справа, PolygonSprite, рисующийся большим количеством маленьких треугольников.

Стоит ли идти на такой компромисс, чисто по соображениям производительности, зависит от ряда факторов (форма/детализация спрайта, размер, количество нарисованного на экране, и так далее), но в основном, вершины дешевле пикселей на современных графических процессорах.

AutoPolygon

AutoPolygon – это вспомогательный класс. Его цель – создавать 2d полигональную сетку на основе изображения.

Существуют функции для каждого шага обработки этого процесса, от определения всех точек, до триангуляции. Результат может быть передан в функцию create объекта sprite, для создания PolygonSprite. Пример:

Источник

Что такое спрайты и как с ними работать

Ссылка на проект занятия (lesson 9.flowballs.zip): https://github.com/selfedu-rus/pygame

Представьте, что мы делаем игру, в которой множество подвижных объектов, с которым взаимодействует пользователь. Как в этом случае правильно спроектировать программу на Pygame, чтобы эффективно обрабатывать движения и взаимодействия? Для этого была специально создана ветка:

для работы со спрайтами. Вообще в игровом процессе спрайт – это любой подвижный объект. И когда таких объектов много, то класс:

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

Для начала создадим базовый каркас приложения. Он вам уже знаком и выглядит следующим образом:

Давайте теперь добавим сюда подвижный объект в виде падающего сверху шарика. Для этого мы воспользуемся классом Sprite и на его основе создадим новый класс Ball для обработки падающих шариков. Этот класс мы объявим в отдельном файле ball.py, чтобы сохранить модульность нашей программы:

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

Отлично, это мы сделали. Теперь в основном модуле подключим этот файл и создадим шар через класс Ball:

После этого в главном цикле реализуем движение шара b1:

И при запуске программы увидим как шар в виде медведя падает вниз. Давайте для красоты добавим еще фон. Сначала загрузим его:

а, затем, в главном цикле будем перерисовывать вместо вызова fill(BLACK):

Получим такой вид игрового процесса:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Далее, смотрите, вот это изменение координат спрайта непосредственно в главном цикле – не лучшая практика. Лучше определить метод update() непосредственно в классе Ball:

А в конструктор добавим параметр speed:

После этого, создаем шарик, указывая три параметра:

и вызываем метод update в главном цикле:

Мы здесь дополнительно передаем высоту окна, чтобы метод update «знал» когда останавливать падение шарика.

Отлично, это мы сделали. Но представим теперь, что у нас одновременно падают несколько шариков. Тогда их нужно сначала создать, например, вот так:

А, затем, в главном цикле перерисовывать:

Группы спрайтов

Текст программы выглядит не очень. Здесь, по сути, происходит дублирование кода, что не есть хорошо. И так как это типовая задача при создании игр, то в Pygame для ее решения было предложено спрайты объединять в группы и обрабатывать их единым образом с позиции этой группы.

Для создания группы используется класс:

и, далее, с помощью метода add мы добавляем в группу наши спрайты:

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

Здесь sc – это поверхность, на которой рисуется группа спрайтов. И, далее, с помощью метода update() группы выполняется вызов такого же метода у каждого спрайта:

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

Если графически представить работу группы, то это можно изобразить в виде следующей коллекции спрайтов:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

И при вызове метода balls.update(H) группы происходит последовательный вызов этого же метода у спрайтов, принадлежащих этой группе.

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

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

Смотрите, мы здесь в конструктор передаем немного другие параметры: вместо пути к изображению – ссылку на слой с нарисованным шаром, а последний параметр – ссылка на группу, к которой добавляется шар. Причем, добавление реализуем непосредственно в классе Ball. Так как он унаследован от базового класса Sprite, то у Ball есть метод add(), который позволяет добавлять спрайт в указанную группу. И есть методы kill() и remove(), которые удаляют спрайт из группы:

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Мы воспользуемся этим функционалом и перепишем класс Ball в следующем виде:

Смотрите, при создании объекта спрайт сначала добавляется к группе, а когда шар долетает до земли, то удаляется из группы. И так как на объект нет других ссылок, то он автоматически уничтожается сборщиком мусора языка Python.

Ну и, наконец, нам нужно каждые две секунды создавать новые шары. Для этого воспользуемся модулем

и определим таймер, который каждые 2000 мс (то есть, 2 сек) будет генерировать событие USEREVENT:

Затем, в главном цикле мы будем отслеживать это пользовательское событие и по нему создавать новый шар:

То есть, вначале перед циклом создаем первый шар, а все последующие создаются каждые две секунды. Причем, они будут автоматически добавляться в группу balls, а при достижении земли – удаляться из нее, что очень удобно.

Вот так осуществляется групповая работа со спрайтами в Pygame.

Видео по теме

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Что такое Pygame? Каркас приложения, FPS | Pygame #1

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Рисование графических примитивов | Pygame #2

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Как обрабатывать события от клавиатуры | Pygame #3

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Как обрабатывать события от мыши | Pygame #4

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Создание поверхностей (Surface) и их анимация. Метод blit | Pygame #5

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Класс Rect. Его роль, свойства и методы | Pygame #6

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Как рисовать текст различными шрифтами | Pygame #7

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Как работать с изображениями. Модули image и transform | Pygame #8

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Что такое спрайты и как с ними работать | Pygame #9

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Как делать контроль столкновений | Pygame #10

что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Добавляем звук в игровой процесс. Модули mixer и music | Pygame #11

© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта

Источник

Урок 3. Спрайты

Этот урок будет о спрайтах — объектах, из которых состоят практически все 2D-игры. К примеру, всем известная игра Super Mario. Вспомните все объекты из игры: сам Марио, враги, монеты, лестницы, кирпичи. Все это — спрайты. То есть, обычная 2D-игра состоит из спрайтов и бэкграунда (задний фон, обычно какая-нибудь картинка). Некоторые части заднего фона также могут являться спрайтами — движущееся солнце или облако например. Такие спрайты не могут воздействовать на игрока.
что такое спрайт в играх. Смотреть фото что такое спрайт в играх. Смотреть картинку что такое спрайт в играх. Картинка про что такое спрайт в играх. Фото что такое спрайт в играх

Спрайты мы будем делать анимированные, но это не просто движение картинок, примерно как мы делали в прошлом уроке. Посмотрев на скриншот, кое-кто наверное узнал знаменитую игру от Phenomedia «Sven Bomwollen».

Каждый спрайт состоит из кадров, прямо как в мультфильмах. Эти кадры отображаются по порядку с небольшой задержкой. В итоге мы видим то, что называется анимацией. Если же спрайт должен быть неподвижный, то кадр у него будет всего один. Каждый кадр — это BMP файл. Но мы же помним, что BMP-файл может быть только прямоугольником, а наши спрайты совсем нет. В предыдущем уроке забавное существо было заключено в белый прямоугольник. Но нам такие спрайты не нужны! Для этого мы сделаем спрайты частично прозрачными, а точнее — прозрачным будет все, что мы не хотим отображать при условии, что эти ненужные части одного цвета. Посмотрите на картинку:

Фиолетовый цвет мы сделаем прозрачным. И у нас останется только симпатичная овечка! На этом рисунке прозрачный цвет мы назначим RGB(255,0,255) — в соответствии с кодировкой цвета RGB. При помощи SDL реализовать это очень просто. Вот небольшой пример:

SDL_SetColorKey(surface, SDL_SRCCOLORKEY, SDL_MapRGB(surface->format,r,g,b));

Каждый кадр состоит из поверхности ( surface ) с изображением и значением паузы в миллисекундах между показами кадров. Класс CSpriteBase является базой для спрайта. В нем хранятся все изображения кадров и другие данные. Из одной базы можно создать сколько угодно спрайтов (целое стадо овечек) и это не займет много памяти, т.к. изображения для идентичных спрайтов хранятся в базе, а каждый спрайт просто ссылается на базу.

После этого установим значение mBuilt равным единице, что означает, что класс инициализирован. Заведем еще переменную-счетчик, чтобы считать загруженные картинки:

Теперь считаем RGB, паузу и имя файла с картинкой кадра и загрузим его:

Загрузка картинки будет отличаться от той, что была в прошлом уроке. Сначала создадим временную поверхность SDL_Surface и загрузим в нее картинку:

Функции xadd() и yadd() прибавляют значение к текущим координатам спрайта. Например, xadd(1) сместит спрайт вправо на 1 единицу, а yadd(-3) сместит спрайт вверх на 3 единицы. xset() и yset() позволяют вручную установить координаты. Функция set() устанавливает сразу обе координаты:

Функция ImageLoad() очень простая. Она почти такая же как с прошлого урока, но использует SDL_DisplayFormat() для скорости:

Функция InitImages() просто загружает картину заднего фона:

Функция DrawIMG() рисует изображение на экран в заданной позиции:

DrawBG() отображает задний фон на экран:

В функции DrawScene() мы рисуем спрайты. Сначала затираем задний фон, затем обновляем и рисуем. И в конце — SDL_Flip() для обновления экрана:

Затем инициализируем базы спрайтов:

Инициализируем сами спрайты: установим координаты и скорость:

Спрячем курсор мышки и нарисуем задний фон:

Далее главный цикл с проверками событий:

В случае нажатий соответствующих клавиш обработаем координаты одного из спрайтов. Здесь я сделал управление так же, как в игре «Sven Bomvollen» от PhenomediaAG. Все изображения также принадлежат этой компании.

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

Вот собственно и вся программа! Исходный код проекта урока.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *