Как найти нужный спрайт

Время на прочтение
3 мин

Количество просмотров 427K

С развитием HTML5 и мобильных платформ 2D-игры возвращаются в моду. Заниматься такими проектами, будь то браузерные игры, игры на телефон или для ПК, стало легче благодаря таким инструментам, как Unity, и онлайн-ресурсам с игровыми ассетами. Ниже представлен список из 10 лучших сайтов с 2D-ресурсами для игр – как платными, так и бесплатными.

*Сайты перечислены в случайном порядке*

1. Unity Asset Store (платный)

Крупнейший сайт с платными игровыми ассетами. Использовать движок Unity для работы необязательно – чтобы получить доступ к ресурсам на Asset Store, нужно лишь загрузить его бесплатную версию. Скачанные файлы будут сохранены в папку проекта Unity, откуда их можно импортировать в любой игровой 2D движок.

Стоит отметить, что Unity в руках умелого разработчика обладает огромным потенциалом, о чем свидетельствует большое количество успешных 2D игр (чего только стоит популярная Bad Piggies от Rovio). А Unity Asset Store предлагает широчайший выбор 2D ассетов.

2. GameDev Market (платный)

GameDev Market – относительно новый сайт, удобно организованный по категориям контента (как и Super Game Asset, о котором пойдет речь ниже). Здесь вы найдете как 2D, так и 3D ресурсы, включая UI, спрайты персонажей, иконки и окружения. Художники выставляют ассеты на продажу, и ассортимент растет с каждым днем.

3. Graphicriver – Game Assets (платный)

Graphicriver – один из самых популярных ресурсов шаблонных изображений. В связи с развитием казуальных мобильных игр, там появилась отдельная категория с 2D ассетами. До размещения на сайте весь контент проходит внутреннюю проверку, а после публикации любой пользователь может оставить свою оценку и отзыв. Итого: это надежный, активно развивающийся сайт под пристальным модерированием Envato.

4. Scirra Store (платный)

Scirra – компания-разработчик Construct 2, популярного 2D редактора на HTML5, у которой недавно появился собственный магазин ассетов. Здесь можно найти аудио-, графические ресурсы и даже готовые игровые шаблоны для Construct 2. Впрочем, для работы можно использовать и любой другой 2D редактор.

5. Game Art Partners (платный)

На сайте Game Art Partners можно купить разнообразные мультяшные ассеты для 2D платформеров, включая анимированных персонажей, монстров, оружие, визуальные эффекты и наборы элементов интерфейса.

6. Super Game Asset (платный)

Если вы создаете RPG или игру с изометрической графикой – этот сайт для вас. Здесь вы найдете самые высококачественные ассеты: красочные иконки для RPG (пожалуй, лучшие из доступных онлайн), 2D спрайты, анимированные спрайты персонажей и огромные изометрические карты. Что немаловажно, большинство представленных ресурсов выполнены в одном стиле.

7. Open Game Art (бесплатный)

Исчерпывающий ресурс для разработчиков игр с открытым исходным кодом, Open Game Art можно назвать крупнейшим собранием игровых ассетов со свободной лицензией. Все материалы – от спрайтов до иконок – можно загрузить по лицензиям GNU или Creative Commons. Это отличный сайт для новичков, но многие ассеты отличаются по визуальному стилю, поэтому их придется тщательно отбирать.

8. Kenney Game Assets (бесплатный)

Еще один отличный сайт с более чем 20 тыс. ассетами, включая элементы UI и различные спрайты для 2D платформеров. Большинство ресурсов представлены в векторной графике и подойдут для любого устройства, независимо от разрешения экрана. Ассеты можно скачать по отдельности (бесплатно) или одним набором (за скромную плату в $9).

9. Game-Icons.net (бесплатный)

Game-icons.net – лучший сайт с бесплатными иконками, которых здесь ни много ни мало 2000. Несмотря на то что все иконки черно-белого цвета, они достаточно универсальные и могут быть использованы для обозначения действий, заклинаний, навыков, предметов и т. п. Приятный бонус – векторный формат.

10. Reiner’s Tilesets (бесплатный)

Лучший сайт c бесплатными тайлами. Здесь можно найти спрайты животных, растений, построек, оружия, визуальных эффектов и практически любых объектов для RPG с изометрической графикой. Стиль ассетов напоминает Diablo II. Это отличный ресурс для начинающих разработчиков, желающих протестировать игровой движок или приступить к созданию своей игры.

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

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

pygame.sprite

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

pygame.sprite.Sprite

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

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

import pygame
 
pygame.init()
 
BLACK = (0, 0, 0)
W, H = 1000, 570
 
sc = pygame.display.set_mode((W, H))
 
clock = pygame.time.Clock()
FPS = 60
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
 
    clock.tick(FPS)

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

import pygame
 
class Ball(pygame.sprite.Sprite):
    def __init__(self, x, filename):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(filename).convert_alpha()
        self.rect = self.image.get_rect(center=(x, 0))

Значит, здесь мы
определяем наш собственный класс Ball, наследуя его от базового класса Sprite. В результате,
мы расширяем функциональность этого базового класса, определяя в конструкторе
два обязательных свойства:

  • image – графическое
    представление спрайта (ссылка на Surface);

  • rect – положение и
    размер спрайта.

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

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

from ball import Ball
...
speed = 1
b1 = Ball(W//2, 'images/ball_bear.png')

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

    sc.fill(BLACK)
    sc.blit(b1.image, b1.rect)
    pygame.display.update()
 
    clock.tick(FPS)
 
    if b1.rect.y < H-20:
        b1.rect.y += speed
    else:
        b1.rect.y = 0

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

bg = pygame.image.load('images/back1.jpg').convert()

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

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

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

    def update(self, *args):
        if self.rect.y < args[0] - 20:
            self.rect.y += self.speed
        else:
            self.rect.y = 0

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

    def __init__(self, x, speed, filename):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(filename).convert_alpha()
        self.rect = self.image.get_rect(center=(x, 0))
        self.speed = speed

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

b1 = Ball(W//2, speed, 'images/ball_bear.png')

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

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

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

b1 = Ball(W//2, speed, 'images/ball_bear.png')
b2 = Ball(W//2-250, 2, 'images/ball_fox.png')
b3 = Ball(W//2+100, 3, 'images/ball_panda.png')

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

    sc.blit(bg, (0, 0))
    sc.blit(b1.image, b1.rect)
    sc.blit(b2.image, b2.rect)
    sc.blit(b3.image, b3.rect)
    pygame.display.update()
 
    clock.tick(FPS)
 
    b1.update(H)
    b2.update(H)
    b3.update(H)

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

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

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

pygame.sprite.Group()

например, так:

balls = pygame.sprite.Group()

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

balls.add(Ball(W//2, 1, 'images/ball_bear.png'))
balls.add(Ball(W//2-250, 2, 'images/ball_fox.png'),
          Ball(W//2+100, 3, 'images/ball_panda.png'))

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

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

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

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

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

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

balls_images = ['ball_bear.png', 'ball_fox.png', 'ball_panda.png']
balls_surf = [pygame.image.load('images/'+path).convert_alpha() for path in balls_images]

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

def createBall(group):
    indx = randint(0, len(balls_surf)-1)
    x = randint(20, W-20)
    speed = randint(1, 4)
 
    return Ball(x, speed, balls_surf[indx], group)

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

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

import pygame
 
class Ball(pygame.sprite.Sprite):
    def __init__(self, x, speed, surf, group):
        pygame.sprite.Sprite.__init__(self)
        self.image = surf
        self.rect = self.image.get_rect(center=(x, 0))
        self.speed = speed
        self.add(group)
 
    def update(self, *args):
        if self.rect.y < args[0] - 20:
            self.rect.y += self.speed
        else:
            self.kill()

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

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

pygame.time

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

pygame.time.set_timer(pygame.USEREVENT, 2000)

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

createBall(balls)
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
        elif event.type == pygame.USEREVENT:
            createBall(balls)
 
    sc.blit(bg, (0, 0))
    balls.draw(sc)
    pygame.display.update()
 
    clock.tick(FPS)
 
    balls.update(H)

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

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

Видео по теме

Вопросы:

·    
Поиск
спрайтов и фонов в Интернете.

·    
Редактирование
спрайтов и фонов в Scratch.

Ранее
мы узнали, как сохранять и загружать спрайты и фоны для сцены. Однако в роли
спрайтов и фонов можно использовать не только файлы Scratch. Также в качестве
спрайтов можно использовать файлы изображений. Они могут уже находиться на
компьютере или их можно загрузить из Интернета.

Запустим
среду Scratch.
Удалим спрайт Царапки со сцены. Для этого в поле спрайтов нажмём правой кнопкой
мыши по иконке Царапки и в появившемся меню выберем пункт «Удалить». Сейчас
наша сцена пуста. Найдём для неё декорации и персонажа в Интернете. Начнём с
фона сцены. Важно, чтобы размер изображения для фона был не меньше чем 480
× 360 пикселей.
Пиксели – это отдельные точки разных цветов, из
которых состоит изображение.

Для
поиска изображения запустим браузер – программу-обозреватель веб-сайтов. Для
поиска картинки можно воспользоваться одной из поисковых служб. Например, нам
понравилась эта картинка лесной поляны. Стоит убедиться, что её размер не
меньше указанного ранее. В браузерах Microsoft Internet Explorer и Microsoft Edge для этого можно нажать
на картинку правой кнопкой мыши и в появившемся меню выбрать пункт «Свойства».
На экране появилось окно свойств изображения. В нём нужно найти пункт
«Размеры». Как видим, размеры выбранной картинки – девятьсот пятьдесят пять на
пятьсот тридцать два пикселя. Это больше, чем четыреста восемьдесят на триста
шестьдесят пикселей. Мы можем использовать эту картинку в качестве фона. В
других браузерах размер картинки можно определить иначе.

Теперь
нам нужно загрузить эту картинку из Интернета на компьютер. Для этого нажмём на
неё правой кнопкой мыши и в появившемся меню выберем пункт «Сохранить
изображение как…
». На экране появилось уже знакомое нам окно сохранения
файла. Сохраним изображение в нашей рабочей папке под именем «Лесная поляна».

Нам
нужно импортировать загруженное изображение в Scratch. Для этого, не закрывая
окно браузера, вернём на экран окно среды Scratch. Выделим иконку сцены.
Как мы помним, она находится слева от поля спрайтов. После этого в верхней
правой части окна перейдём на вкладку «Фоны». Далее нажмём на кнопку «Загрузить
фон из файла
», находящуюся под вкладками. В появившемся окне выбора файла
выберем файл «Лесная поляна» из нашей рабочей папки.

Наша
лесная поляна появилась на сцене, однако сверху и снизу от неё остались пустые
белые промежутки. Чтобы это исправить, перейдём к области рисования в правой
части экрана. Выберем инструмент с названием «Выбрать». Он используется
для выделения участков изображения.  Установим курсор мыши в одном из
углов изображения поляны. После этого, удерживая левую кнопку мыши, переместим
курсор в противоположный угол изображения поляны. Таким образом мы выделили
участок сцены, на котором изображена поляна. Как видим, по краям изображения
появились границы синего цвета и точки на ней. Наведём курсор на нижнюю точку
границы. Он принял вид двунаправленной стрелки. Теперь перетащим эту точку в
нижний край сцены. При этом растягивается изображение поляны. Поместим
выделенную точку на нижний край сцены.

Теперь
наша поляна занимает всю сцену. Нужно населить её разными лесными жителями, то
есть добавить на сцену спрайты. В качестве спрайта можно использовать любое
изображение. Как и в случае с поляной, воспользуемся браузером и найдём
картинку медведя, например, такую… Точно так же, как мы это делали с лесной
поляной, сохраним картинку медведя в нашей рабочей папке под именем «Медведь».

Теперь
в среде Scratch
загрузим спрайт нашего медведя. Для этого в верхней части поля спрайтов нажмём
на кнопку «Загрузить спрайт из файла». В появившемся окне выберем из нашей
рабочей папки файл «Медведь». Мишка появился на поляне. А в поле спрайтов
появился спрайт и с именем «Медведь». Наш мишка как-то великоват для маленькой
лесной полянки. Однако это не беда, ведь мы можем его уменьшить. Для этого над
вкладками нажмём на кнопку «Уменьшить». Переместим курсор мыши на мишку,
который находится на поляне, и будем нажимать на него до тех пор, пока размер
мишки не станет достаточно маленьким для нашей лесной поляны. Перетащим нашего
медведя в нужное место поляны.

Поэкспериментируем
немного над нашим мишкой. Для этого перейдём на вкладку Костюмы. Обратим
внимание на область рисования. Как видим, наш мишка окружён маленькими шахматными
клетками, при этом на сцене вокруг него таких клеток нет. Эти клетки означают
прозрачный фон. Проверим это. В области рисования выберем инструмент «Заполнить
цветом» и укажем белый цвет. Теперь нажмём левой кнопкой мыши по области вокруг
медведя. Она стала белой. При этом на сцене мишка также попал внутрь белого
прямоугольника. Нужно это исправить. Вернёмся к полю рисования и зальём область
вокруг мишки прозрачным фоном. Чтобы его выбрать, найдём на палитре
цветов белый квадратик, перечёркнутый красной линией, и выберем его. Дальше
нажмём левой кнопкой мыши по свободной области вокруг медведя. Фон вокруг мишки
снова стал прозрачным, и на сцене исчез белый прямоугольник.

Мишка
говорит, что ему скучно и одиноко в лесу. Исправим это. Добавим к нему соседей, например ёжика и
зайца. Найдём в Интернете ёжика. Например, вот такого… Сохраним картинку с ним
в нашей рабочей папке под именем «Ёжик».

Перейдём к окну среды Scratch и загрузим нашего ёжика.
 Он появился на сцене, а в поле спрайтов появилась иконка спрайта с именем
«ёжик». Уменьшим его и разместим напротив мишки. Теперь найдём зайца и сохраним
картинку с ним в нашей рабочей папке. Загрузим спрайт с ним в среде Scratch, уменьшим его и
разместим рядом с мишкой. Мы можем ещё немного украсить нашу картинку, положив
ёжику на спину яблоко. Спрайт яблока можно без труда найти в библиотеке Scratch.

Какой
замечательный рисунок у нас получился, просто лесная сказка… Сохраним его. Для
этого в меню «Файл» выберем пункт «Сохранить как…». Сохраним
рисунок в нашей рабочей папке под именем «Лесная сказка».

Мы
узнали:

·         
В
качестве фона сцены или спрайта можно использовать любое изображение.

·         
Изображение
для фона сцены должно иметь размер не меньше, чем 480 × 360 пикселей.

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

3D, 2D, музыка, ассеты, плагины, инструменты. Много-много полезного на блюдечке. Более 60 источников.

https://gbcdn.mrgcdn.ru/uploads/post/1965/og_image/133f43a1150b16246b581acf36fea020.png

Когда несколько месяцев назад вышел перевод статьи «В гейм-дизайнеры с нуля», в комментариях предложили сделать большой обзор полезностей и бесплатных ресурсов для разработчика игр. Сегодня такой материал перед вами. 

Искать лучшие ресурсы мне помогал Владимир Михайлов — энтузиаст инди-разработки, автор музыки и звукового оформления к играм Dragon’s Dungeon, Quest Hunter, One Helluva Day. Мы постарались охватить разные направления: от готовой к использованию графики и музыки до сообществ, где можно попросить совета и найти соавторов. 

Пост будет длинным. Начинаем!

Наборы материалов (Assets)

OpenGameArt.Org — один из самых известных сайтов с бесплатными игровыми ресурсами, доступными как Creative Commons. Но я хочу отметить раздел Collect. Готовые тематические подборки очень экономят время. Вот набор тайлов для изометрической игры и коллекция «изометрических» персонажей. А вот вам пиксель-арт и графика в стиле NES и Game Boy.

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

Сraftpix, раздел Freebies — более 80 бесплатных пакетов 2D-графики для RPG, стратегий, аркад, платформеров и других типов игр. Тайлы, персонажи, GUI, иконки, фоны.

Open Game Graphics — гора плюшек для 2D-игр. Помимо дизайна интерфейсов, персонажей и уровней можно скачать 25 полных коллекций графики под игру конкретного жанра и антуража: мрачный Sci-Fi-платформер, красочный Top-down shooter, 8-битный рогалик и так далее. Много спрайтов в мультяшном стиле.

PixelGameArt — фэнтезийные и Sci-Fi-ассеты в стиле пиксель-арт с возможностью предпросмотра демок в браузере!

Персонажи и часть фона из набора GothicVania Town. Онлайн-демо

Kenney — поставщик игровых ресурсов, который предлагает около 60 бесплатных наборов ассетов, в том числе тайлы, изометрические спрайты, шаблоны-конструкторы для персонажей и построек, 3D-модели, музыку и звуки, элементы UI.

GameDevMarket — ярмарка ресурсов, созданных пользователями. Есть и уютный уголок «халявы». Чтобы попасть туда, откройте интересующий раздел (например, 2D > Characters) и в колонке слева выберите Type > Free.

Game Developer Studio — более 100 бесплатных 2D-ассетов, которые можно отфильтровать в магазине по принципу «сначала дешевые». Автор сайта и всех материалов — Роберт Брукс. Вы можете отправлять ему идеи нового контента и голосовать за чужие предложения в разделе Suggest an asset.

Game assets на itch.io — золотые россыпи 2D- и 3D-графики для ваших игр. Тысячи ассетов от участников сообщества. Много красивого пиксель-арта, выразительные персонажи, детализированные тайлы карт и уровней. Никакой рекламы на страницах. Именины сердца!

Renpy для чайников — русскоязычный блог с полезностями для тех, кто делает визуальные новеллы на движке Ren’Py. Скрипты, мини-игры, спрайты, нестандартные меню, GUI.

А теперь посмотрим на более узконаправленные сайты и сервисы.

3D-графика

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

Мы говорим о бесплатных ресурсах для игр, поэтому ориентироваться будем прежде всего на Blender и его сообщество. 

BlendSwap

Этот портал — моя первая остановка в поисках годного 3D. Тут собраны модели всех типов: персонажи, интерьеры, архитектурные сооружения, транспорт, оружие, одежда, еда, готовые сцены и пейзажи. Плюс низкополигональные меши, риги для скелетной анимации, текстуры и материалы, эффекты на основе частиц, node-заготовки для Blender, настройки стилей визуализации, скрипты на Python. 

Все ресурсы — с лицензией Creative Commons. Причем очень многие энтузиасты выбирают CC0, по которой полностью отказываются от авторских прав.

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

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

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

Несколько интересных BlendSwap-аккаунтов:

  • izuzf — много оружия разного типа и разных эпох, персонажи, в том числе low poly.
  • Daren — персонажи, в том числе с полным ригом и лицензией CC0. Например, вот.
  • tastyfish — три набора объектов и декораций для RPG в мультяшном стиле плюс оружие. Лицензия — CC0.
  • Mutte — монстры, зомби, прочие враги и военная техника. 

  • RedFrost — 47 заготовок для игрового движка Blender Game Engine по лицензии CC0.
  • Коллекция пользователя JerryJury — 1000 роскошных моделей, с большинством которых можно делать что угодно. Бытовые мелочи, техника, оружие, боевые роботы, эффекты для Blender.
  • Коллекция papasmrfe — тут много симпатичных персонажей.

Другие сайты с 3D

ShareCG — основанный в 2007 году сервис, куда любители и профессионалы компьютерной графики загружают свой контент. Помимо бесплатных 3D-моделей, текстур и материалов, здесь есть стоковые фотографии, уроки, скрипты, программы и плагины для CG-творчества, музыка.

Thingverse — сообщество любителей 3D-печати, где можно найти оригинальные модели по лицензиям Creative Commons.

Текстуры

СС0textures — 529 реалистичных PBR-текстур, которые можно использовать где и как угодно без ссылок на авторов. Без регистрации. На всякий случай: PBR (Physically-Based Rendering) — это физически корректная визуализация. Варианты разрешения текстур: 2K, 4K, 8K. А еще можно скачать исходники в формате .sbsar — для редактирования в программе Substance Designer.

TextureLibt — коллекция из 6500+ текстур для личных и коммерческих целей. Все это работы одного фотографа. Он просит вас о малости: не перепродавать его материалы и, по возможности, при использовании текстур указывать авторство.

Texture — большая коллекция текстур разного, но в среднем невысокого разрешения (примерно 1000–1300 пикселей по ширине). Условия: можно использовать в платной игре, но нельзя продавать сами текстуры (даже после редактирования) и выдавать их за свои.

Стоковые изображения

Stock Graphic Designs, раздел Freebies — наборы профессионально исполненных векторных изображений для коммерческого и личного пользования. Форматы: Ai (Adobe Illustrator) и EPS.

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

Поиск по DeviantArt

На портале DeviantArt, где обитают любители визуального искусства, среди тонн авторского контента можно найти бесплатные спрайты, 3D-модели и фотографии. Особенно много здесь фанатов аниме и пиксель-арта. Но далеко не все полезное попадает в раздел Resources & Stock Images. Вот несколько советов, которые экономят время на поиск ресурсов.

Следите за группами, которые раздают бесплатное.

Примеры:

Game-Art — группа целиком посвящена игрострою. Здесь можно посмотреть, что делают другие, показать свои арты и концепты, запросить критику участников, а еще — скачать игровые ресурсы из раздела Resources & Tutorials. Будьте внимательны: не все можно использовать в коммерческих проектах. О правовых нюансах еще скажу ниже.

Clear-Cut — изображения объектов и персонажей на прозрачном фоне в форматах PNG и PSD. Здесь и аккуратные вырезки из фотографий, и рендеры 3D-моделей.

Safe-Stock-Resources — большой фотосток с изображениями людей и природы. Отличный опорный материал для создания фонов и персонажей. Заявленная цель группы — собрать надежных авторов, чей контент можно использовать, не боясь, что он был где-то украден.

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

Digital-Art-Club/Stocks and resources — бесплатные материалы и уроки по Digital Art.

Ориентируйтесь по хештегам.

Залежи бесплатного добра вы найдете по тегам #unrestricted, #commons, #freetouse, #freesprites, #freebackgrounds, #freeresource, #freebies и другим. Экспериментируйте и обращайте внимание на теги к работам, которые вам нравятся.

Просматривайте чужие коллекции.

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

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

Ищите работы с лицензией Creative Commons через Google.

Введите в поисковик: 

«This work is licensed under a Creative Commons» site:deviantart.com

В списке результатов перейдите на вкладку «Картинки». Получилось! Если что-то нравится — переходим на страницу изображения и уточняем лицензию и авторство непосредственно под картинкой или под заголовком License в блоке справа.

Помните: у большинства групп на DeviantArt нет единых правил пользования изображениями. Каждый участник сам придумывает, что можно и нельзя делать с его работами. Я видела художницу, которая разрешает брать спрайты для коммерческих проектов только при условии, что вы пришлете ей бесплатную копию своей игры :)  

Хорошая практика: если вы что-то взяли, упомяните автора в титрах и пришлите ему ссылку на игру либо скриншоты. Пусть полюбуется, как вы использовали его материалы.

Иконки

Game-Icons — сервис, где можно не только быстро найти подходящую иконку по тегу и названию, но и тут же отредактировать ее прямо в браузере и сохранить как SVG или PNG. Замечательно!

Iconmonstr — тысячи бесплатных черно-белых иконок для оформления мобильных и онлайн-приложений, сайтов, игр.

Шрифты

  • Google Fonts
  • FontSquirrel 
  • DaFont
  • Abstract Fonts

Ищем бесплатные шрифты на DaFont

Звук и музыка

GameAudioGDC Bundle — гигабайты аудио, записанного профессионалами, — для любых ваших проектов, в том числе коммерческих. Это щедрый подарок, который игроделы ежегодно получают по случаю Game Developer’s Conference. До сих пор объем «бандла» увеличивался с каждым годом. Выпуски:

  • 2016 — 16 Гб,
  • 2017 — 20 Гб,
  • 2018 — 30 Гб.

FMA — интерактивная библиотека музыки и звуков, пополняемая кураторами со всего мира. Материалы публикуются с лицензиями Creative Commons.

FreeSound — огромная база бесплатного аудио от участников сообщества. Можно вести коллекции. Основатели проекта, Music Technology Group, — исследователи из Университета имени Помпеу Фабры (Барселона). 

Программы, полезные при создании компьютерных игр

Для работы с 2D

Онлайн-конструктор персонажей для классической двумерной японской RPG (JRPG).

Synfig — отличный бесплатный редактор 2D-анимации для Windows, Linux и MacOS. Поддерживает скелетную анимацию, что избавляет от необходимости вручную перерисовывать позу персонажа из кадра в кадр. Программа автоматически рассчитывает преобразование исходной векторной формы в конечную. Вы можете  использовать разные типы слоев и эффектов и управлять их характеристиками.

Еще два популярных решения для 2D-анимации. Оба open-source и доступны под Windows и OS X:

  • Dragon Bones,

  • OpenToonz.

Inkscape — бесплатный векторный редактор № 1. Приложение из тех, о которых все знают, но нельзя не сказать.

GIMP — редактор растровых изображений, который называют свободной альтернативой Photoshop, хотя он и не перекрывает всех возможностей продукта Adobe.

Для работы с 3D

Blender — великий и прекрасный 3D-редактор, которому трудно найти альтернативу. Позволяет не только создавать и анимировать модели, но и разрабатывать игры на встроенном движке Blender Game Engine.

MakeHuman — программа для создания персонажей и любых антропоморфных  3D-моделей. Результат может выглядеть реалистично либо наоборот  — карикатурно и мультяшно. Blender поддерживает импорт из этой программы (формат .mhx2). Модели, вместе со скелетом и позами, удобно экспортировать в любой редактор для создания игр. На сайте сообщества вы найдете постоянно пополняемую библиотеку дополнительного контента: одежды, причесок, глаз, анимационных ригов, поз, мимики и другого.

World Machine — генератор ландшафтов с возможностью экспорта в Unity. Бесплатен для некоммерческого использования.

TreeIt — генератор деревьев разного типа. Прост в использовании, умеет экспортировать модели в OBJ, X, FBX и DBO, что делает его совместимым с разными движками.

XNormal — программа для запекания карт нормалей.

Sculptris — приложение для ручной «лепки» и раскрашивания 3D-моделей. После запуска программы вы видите что-то похожее на кусок глины. Чтобы придать ему форму, придется много работать мышью и часто переключаться между инструментами.

Аудиоредакторы

Cakewalk Sonar — звуковая рабочая станция с профессиональными инструментами для сочинения музыки, записи, редактирования, сведения и мастеринга аудио. В апреле 2018 года продукт Cakewalk Platinum стал бесплатным. Вдобавок у него активное сообщество: можно делиться своим творчеством, получать фидбэк, скачивать дополнения.

MuseScore — кроссплатформенный нотный редактор для создания музыки через работу с партитурой. Бесплатный, с открытым исходным кодом (GPLv2) и десятками плагинов. Удобно использовать в связке с Sonar.

Bosca Ceoil — программа-трекер, где вы создаете музыку методом расстановки семплов. Есть онлайн-версия и десктопные приложения для Windows, Linux, MacOS X.

FamiTracker — позволяет создавать музыку для восьмибитных приставок NES, Famicom и Dendy. Благодаря экспорту в формат NSF ваши композиции будут без проблем воспроизводиться не только в эмуляторах, но и на реальном «железе». А еще вы сможете сохранять музыку в WAV-файлы.

Wwise — система интерактивного звука для игр и приложений, в том числе AR/VR. Работает на всех основных десктопных и мобильных платформах, с устройствами виртуальной и дополненной реальности HTC, Oculus, Google, Sony, Microsoft, а также на консолях Xbox, PS (3, 4, Vita), Wii, Nintendo Switch. Инструмент не совсем для новичка — скорее «на вырост». WWise бесплатна в нескольких случаях:

  • при бюджете игры менее 150 000 $. Ограничение — можно использовать до 500 звуков;
  • для некоммерческих проектов. Лицензию присылают по заявке.

К системе можно прикручивать сторонние плагины.

FMOD Studio — набор инструментов, который охватывает весь цикл работы со звуком для игр на Unity, UE4 и других движках. Упрощает взаимодействие звукорежиссеров и программистов: те и другие могут быстро вносить в проект изменения, не мешая друг другу. Работает на ПК и Mac.

Audacity — простой кроссплатформенный звуковой редактор, функциональность которого можно расширять за счет плагинов, в том числе VST и LV2.

Русскоязычные сообщества игроделов

Для начала пройдемся по группам VK:

GGDev — новости игровой индустрии, уроки и статьи для разработчиков, обсуждение жанров и игровых механик, стримы мероприятий. Реклама своих проектов строго запрещена — админы говорят, что в этом «фишка» группы. 6000 подписчиков.

Инди игры | Indie Games — группа для продвижения ваших инди-проектов, а формально — паблик Indie-раздела на портале Game.ru. Участники могут предлагать свои материалы, но публикует что-либо только админ. Зато в обсуждениях подписчики делятся трейлерами и скриншотами, новостями и мнениями, ищут людей в команду.

Unity3D & CG / Unity 3D — группа взаимопомощи Unity-разработчиков. Основная масса публикаций — это вопросы участников по разным аспектам работы над игрой. Причем сообщество очень живо откликается и помогает, что и делает группу интересной. Более 32 000 участников.

Игровая вселенная — публикует познавательные материалы для игроделов и gamedev-вакансии. Подписчиков — 24 000.

Last Indie Standing — обсуждение инди-игр и их разработки, 5–10 постов в день. Иллюстрированные заметки по гейм-дизайну, новости, конкурсы, видео лекций и конференций. Около 4000 подписчиков.

GameDev — Создание игр — группа с лозунгом «Научим запускать однообразные провальные проекты». :) Основа ленты — ссылки на познавательные материалы (в основном с Хабра). Реже появляются анонсы мастер-классов и конференций по играм. Участников — 7000.

Обязательно загляните в «Лигу разработчиков видеоигр» на Pikabu! Кстати, там вы можете встретить преподавателей GeekBrains, но об этом в другой раз. А пока предлагаю полистать красочные посты в ленте Лиги или даже написать туда о вашем проекте.

Новости, советы, конкурсы

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

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

GCUP — портал, целиком посвященный созданию игр. Здесь собрана огромная база игровых движков и конструкторов. А еще тут — уроки, новости, утилиты и бурлящий форум, где выкладывают и обсуждают новые игры, набирают людей в команду, задают вопросы и делятся опытом.

DTF — информационное сообщество типа Pikabu, но более узкой направленности. Пользователи публикуют и обсуждают статьи про IT и сферу развлечений, в том числе игры и их разработку. Еще тут есть раздел вакансий для разработчиков, гейм-дизайнеров, художников и других спецов, участвующих в создании и раскрутке игр.

Уф… На этом все. Спасибо, что дочитали! Если нашли интересное — не забудьте добавить в закладки! :)  

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

Мы упустили что-то важное и замечательное? Забыли упомянуть ваш любимый инструмент разработчика или сайт с игровыми ресурсами? Пожалуйста, дополните наш список — будем признательны за подсказки и обратную связь.

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

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

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

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

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

clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group() 

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

    # Обновление
    all_sprites.update()

    # Отрисовка
    screen.fill(BLACK)
    all_sprites.draw(screen)

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

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

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

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

class Player(pygame.sprite.Sprite):

class сообщает Python, что определяется новый объект, который будет спрайтом игрока. Его тип pygame.sprite.Sprite. Это значит, что он будет основан на заранее определенном в Pygame классе Sprite.

Первое, что нужно в определении class — специальная функция __init__(), включающая код, который будет запущен при создании нового объекта этого типа. Также у каждого спрайта в Pygame должно быть два свойства: image и rect.

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()

Первая строка, Pygame.sprite.Sprite.__init__(self) требуется в Pygame — она запускает инициализатор встроенных классов Sprite. Далее необходимо определить свойство image. Сейчас просто создадим квадрат размером 50х50 и заполним его зеленым (GREEN) цветом. Чуть позже вы узнаете, как сделать image спрайта красивее, используя, например, персонажа или космический корабль, но сейчас достаточно сплошного квадрата.

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

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

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)

Теперь, после определения спрайта игрока Player, нужно отрисовать (создать) его, инициализировав экземпляр (instance) класса Player. Также нужно обязательно добавить спрайт в группу all_sprites.

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

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

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

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

В игровом цикле есть функция all_sprites.update(). Это значит, что для каждого спрайта в группе Pygame ищет функцию update() и запускает ее. Чтобы спрайт двигался, нужно определить его правила обновления:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)

    def update(self):
        self.rect.x += 5

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

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

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

значения rect

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

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)

    def update(self):
        self.rect.x += 5
        if self.rect.left > WIDTH:
            self.rect.right = 0
 

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

Cпрайт двигается по кругу

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

Код урока:

# Pygame шаблон - скелет для нового проекта Pygame
import pygame
import random

WIDTH = 800
HEIGHT = 650
FPS = 30

# Задаем цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)
        
        
    def update(self):
        self.rect.x += 5
        if self.rect.left > WIDTH:
            self.rect.right = 0


# Создаем игру и окно
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

# Цикл игры
running = True
while running:
    # Держим цикл на правильной скорости
    clock.tick(FPS)
    # Ввод процесса (события)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False

    # Обновление
    all_sprites.update()
    
    # Рендеринг
    screen.fill(BLACK)
    all_sprites.draw(screen)
    # После отрисовки всего, переворачиваем экран
    pygame.display.flip()

pygame.quit()

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

Часть 3. Больше о спрайтах

Понравилась статья? Поделить с друзьями:
  • Как составить модуль по предмету
  • Как найти в 1с зарплатную ведомость
  • Дельта эдс в физике как найти
  • Как найти качественные прилагательные слова
  • Как найти кадастровый номер земельного участка бесплатно