8 бит персонаж для игры

Как создать 8-битный пиксельный персонаж в Illustrator — разъясняем вопрос

8 бит персонаж для игры

Если вы являетесь постоянным читателем моего блога, вы знаете, что я люблю создавать иллюстрации в Illustrator, используя простые или базовые формы. Этот урок доводит эту идею до крайности, ничего не используя инструмент прямоугольник для создания простого 8-битного пиксельного символа стиля. Пиксели обычно ассоциируются с Photoshop, но самое замечательное в Illustrator — это то, что ваша работа на 100% векторная, поэтому в отличие от Photoshop вы можете масштабировать свой дизайн до любого размера, сохраняя эти блочные 8-битные характеристики.

8 бит персонаж для игры

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

8 бит персонаж для игры

В Фотошопе, если вы увеличите изображение достаточно далеко, вы увидите отдельные квадратные пиксели, но в Illustrator нам нужно настроить сетку для работы. В пункте меню «Вид» выберите параметр «Показать сетку» и убедитесь, что функция «Привязать к сетке» включена.

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

Несмотря на то, что это 2D дизайн, простые эффекты перспективы могут быть достигнуты с использованием масштаба. Левая линза солнцезащитных очков имеет ширину в два блока, а правая линза — три блока.

8 бит персонаж для игры

Нарисуйте большой черный прямоугольник, чтобы представить тело персонажа. Перекрыть прямоугольник с головой, но отправить объект на дно стека с помощью сочетания клавиш CMD + Shift + [.

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

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

8 бит персонаж для игры

Вернитесь под опциями View и выключите Grid, чтобы увидеть завершенного персонажа. Будучи векторной иллюстрацией, теперь она может быть масштабирована до любого размера, сохраняя свою 8-битную форму пикселей.

8 бит персонаж для игры

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

Источник

Делайте 8-битные и пиксельные игры

Спрайтовый редактор и инструменты для создания собственных 8-битных игр с GDevelop

Посмотрите редактор спрайтов Piskel, который используется внутри GDevelop для создания 8-битной игры

Спрайтовый редактор Piskel

GDevelop поставляется с Piskel, мощным и простым в использовании 2D-редактором спрайтов. Это идеальный инструмент для создания пиксельной графики, чтобы дать ощущение ретро вашей игре! Вы можете создавать объекты с несколькими анимациями, редактировать в любое время спрайты и видеть результат, запустив предварительный просмотр вашей игры.

8 бит персонаж для игры

The Mighty Rune, a game made with GDevelop

Готовые поведения

Хотите создать ретро-платформерную игру? GDevelop имеет заранее подготовленное поведение, которое вы можете прикрепить к своему персонажу и вашим платформам. Через несколько секунд у вас есть базовый платформер, запущенный и готовый к настройке и расширению! Другие виды поведения, условия и действия могут также использоваться для создания любых 2D-игр: shmup, «Bullet Hell», аркадных игр.

8 бит персонаж для игры

LELL BUB HELLO EARTH: 8-битная игра, сделанная с GDevelop

8 бит персонаж для игры

Создавать игры просто

Придумывай и опубликуй свои игры с Gdevelop. Включает туториалы и примеры.

GDevelop был создан с любовью от Florian Rival

Источник

Ограничения 8-битных игр и их точное воссоздание в Unity

8 бит персонаж для игры

Ретро-игры с простыми механиками и пиксельной графикой способны пробуждать тёплые воспоминания у опытных игроков, и в то же время вполне доступны для более юной аудитории. Сегодня многие игры называются «ретро», но для создания ностальгического стиля требуются усилия и планирование. Именно поэтому мы пригласили ребят из Mega Cat Studios помочь нам в обсуждении этой темы. В этом посте мы рассмотрим всё необходимое для создания аутентичной графики в стиле игр для NES, в том числе важные параметры Unity, графические структуры и цветовые палитры.

Создание аутентичного арта в стиле NES

Для начала мы рассмотрим основы создания графики для игр, соответствующих ограничениям классической Nintendo Entertainment System. Это поколение консолей накладывает серьёзные ограничения на художников, стремящихся воспроизвести его аутентичную графику. Это ограничения на используемые палитры и на размер и количество объектов на экране. Кроме того, важно учитывать, что разрешение этой консоли составляет 256×240 пикселей.

Палитры

При создании совместимой с NES графики художник должен учитывать множество ограничений. Во-первых, самым важным из таких ограничений является то, как в изображении используются цветовые палитры. NES уникальна тем, что все возможные цвета палитры «зашиты» в консоль. NES выбирает, какие цвета использовать в изображении, отправляя наборы значений графическому процессору NES, после чего графический процессор возвращает цвета, соответствующие этим значениям. Ниже показано изображение цветовой палитры NES:

8 бит персонаж для игры

Субпалитры

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

8 бит персонаж для игры

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

Назначение субпалитр

Ограничения на использование палитр становятся ещё более строгими, когда художник переходит к тому, как палитры используются в игре. Чтобы объяснить это, нужно подробнее рассказать о том, как ретро-консоли хранят и отображают графику. Графика любой ретро-консоли хранится внутри игры как тайлы размером 8×8 пикселей. Благодаря этому художники могут экономить место, повторно используя тайлы для разных объектов. (Например, части дороги можно использовать заново, создав из них обрыв или здание). Также важно то, что информация о цвете не хранится вместе с графикой. Все тайлы сохраняются в монохромной палитре. Благодаря этому когда тайл отображается в игре, ему можно назначить субпалитру и одновременно отображать на экране с разными субпалитрами. Это важно при воссоздании графики ретро-консолей на современных платформах, потому что это влияет на то, как мы назначаем палитры графике.

NES по разному назначает палитры спрайтам и фонам. Спрайтам она назначает палитры потайлово. Это значит, что с каждым тайлом 8×8 в спрайте может быть связана одна из четырёх субпалитр спрайта.

8 бит персонаж для игры

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

На фоны накладываются гораздо более строгие ограничения. Палитры фонов назначаются фрагментам размером 16×16. Привязки субпалитр фона всего экрана называются Attribute Tables (таблицами атрибутов). Именно из-за этих таблиц в большинстве ретро-изображений активно используются повторяющиеся тайловые сегменты. Такие сегменты обычно состоят из тайлов 16×16, благодаря чему помещаются в таблицы атрибутов. Несмотря на то, что это было вызвано аппаратными ограничениями, такие тайлы фонов 16×16 стали определяющей характеристикой ретро-графики и теперь абсолютно необходимы для её воссоздания в современных играх.

8 бит персонаж для игры

Вот пример фона красивого города в стилистике RPG, сделанного с учётом этих ограничений. На изображении справа видно, что он хорошо разделяется на блоки размером 16×16 пикселей, а палитры задаются для каждого блока. Для экономии места такие элементы, как черепица крыши, трава и кирпичи на мосту, составлены из повторяющихся сегментов этих блоков. Черепица крыши маленьких зданий использует одинаковые тайлы, но им назначаются разные субпалитры, придающие ей уникальный внешний вид.

Наложение спрайтов

Даже несмотря на то, что художники могут использовать разные субпалитры для каждого тайла спрайта 8×8, у них может возникнуть ситуация, когда необходимо придать спрайту бОльшую цветовую глубину. В таком случае можно использовать наложение спрайтов. Наложение спрайтов — это разделение спрайта на два отдельных спрайта и размещение их друг поверх друга. Это позволяет художникам обойти условие использования одной субпалитры на тайл 8×8. Благодаря этому художники по сути могут удвоить количество цветов, которые можно использовать в одной области размером 8×8. Единственным серьёзным недостатком такого подхода являются ограничения рендеринга спрайтов. NES одновременно способна отображать только 64 спрайтовых тайла размером 8×8, и только по восемь спрайтовых тайлов в одной горизонтальной линии. Если это ограничение достигнуто, все осталььные тайлы рендериться на экране не будут. Именно поэтому во многих играх для NES при большом количестве спрайтов на экране они начинают мерцать. В таком случае единственный способ отображения всех спрайтов — показывать их в перемежающихся кадрах. Такие ограничения нужно учитывать при наложении слоёв спрайтов, потому что это удваивает не только количество цветов, но и количество спрайтовых тайлов в одной горизонтальной линии.

8 бит персонаж для игры

Вот пример наложения спрайтов (Sprite Layering) в действии. Слева показана исходная трёхцветная версия спрайта пирата-призрака. Художник разделил её на две части — тело/шляпу и лицо/руки, а затем назначил им разные палитры. Справа показан результат наложения двух элементов друг на друга.

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

8 бит персонаж для игры

В портрете пирата-призрака тоже используются слои спрайтов, придающие ему бОльшую глубину. Его зелёный череп рендерится на экране как спрайт, а воротник и шляпа — как часть фона. Это позволяет художнику использовать больше цветов в сегменте 16×16, чтобы полностью обойти ограничения таблицы атрибутов.

Графические банки

Чтобы объяснить ещё одно важное ограничение NES, нам сначала нужно вернуться к тому факту, что графика хранится в тайлах. Тайлы графики хранятся на страницах по 256 тайлов, и тайлы из этих страниц не могут загружаться во VRAM в разных местах, поэтому становится сложно на лету соединять и смешивать тайлы с разных страниц. VRAM консоли NES способна отображать одновременно 512 таких тайлов. Кроме того, она делит тайлы наполовину, для спрайтов и фонов. Это значит, что одновременно консоль может отображать только 256 тайлов спрайтов и 256 тайлов фона. Если художник хочет отобразить большое разнообразие спрайтов и фоновых элементов, такое ограничение сильно ему мешает.

8 бит персонаж для игры

Вот графическое представление фоновых и спрайтовых тайлов игры, загружаемых во VRAM. Консоль хранит фоны и спрайты на отдельных страницах.

Чтобы обойти это ограничение, в NES применяется функция, позволяющая художнику разбить каждую страницу на частичные страницы, называемые банками. Поэтому хотя NES не может загружать отдельные тайлы из разных точек графических данных, она способна загружать в разное время отдельные части страницы. В большинстве игр такие банки имеют размер 1 КБ и 2 КБ. Банк 1 КБ соответствует одной четвёртой страницы, или 64 тайлам, а банк 2 КБ — половине страницы, или 128 тайлам. Художник должен принять решение, хочет ли он зарезервировать каждый тип банка под элементы спрайтов или фонов, потому что необходимо использовать оба типа. Это значит, что невозможно иметь банки 1 КБ и для спрайтов, и дя фонов. Одна страница должна использовать банки 1 КБ, а другая — 2 КБ. Как правило, большинство игр использует банки 1 КБ под спрайты, а 2 КБ под фоны, потому что тайлсеты фонов обычно более статичны и требуют меньшей вариативности и замены на лету.

8 бит персонаж для игры

Разбитое на банки изображение, которое мы видели выше. В левой части показаны фоны, использующие банки по 2 КБ, то есть разделённые пополам, а в правой части показаны спрайты, разделённые на банки по 1 КБ. Каждый банк можно свободно заменять на лету.

Полезность банков 1 КБ для спрайтов довольно важна. Если спрайт персонажа имеет большое количество анимаций, не помещающихся в одну страницу, и в то же время необходимо загружать другие спрайты, то отдельные действия можно загрузить в банки 1 КБ, а затем заменять их в зависимости от происходящих на экране действий. Это также увеличивает вариативность спрайтов, которые могут быть использованы в одной области игры. Например, если игрок должен встретить на уровне игры шесть типов врагов, но в страницу спрайтов помещается только игрок и три других типа спрайтов, то когда один тип врага пропадает с экрана, игра может заменить один из банков врагов новым типом врага.

Один из немногих серьёзных недостатков применения банков по 1 КБ для спрайтов и по 2 КБ для фонов заключается в способе обработки фоновой анимации консолью NES. Чтобы анимировать фоновый элемент игры для NES, художник должен создать дублирующие банки анимированных фоновых элементов. Каждый новый дубликат банка будет содержать следующий кадр анимации для каждого из анимированных элементов. Эти банки сменяют друг друга, создавая анимацию. Если художник использует для фонов банки размером в полстраницы, то для хранения всех этих дублирующих банков может потребоваться много места. Один из способов обхода этого ограничения заключается в размещении всех анимированных фоновых элементов для всей игры в одном банке. Но тогда художник сталкивается с другим ограничением: у него остаётся всего 128 тайлов для статических элементов каждого фона. Каждый художник сам принимает решение о том, какой способ хранения ему подойдёт больше.

Трюки со слоями

Во многих играх той эпохи использовались трюки для создания таких эффектов, как параллаксный скроллинг фона, но они тоже ставят перед художниками и дизайнерами сложную задачу. Более поздние 16-битные консоли имели поддержку множественных фоновых слоёв, но NES не обладала такой возможностью. Все фоны были единым плоским изображением. Для создания ощущения глубины и слоистости применялись различные программные трюки. Например, для создания параллаксного скроллинга разработчики могли задавать регистр, который сообщал, когда на экране отрисовывалась определённая горизонтальная линия (называющаяся линией развёртки).

Затем они могли использовать этот регистр для управления скоростью и направлением скроллинга экрана. Благодаря этом можно создавать горизонтальную строку фона, которая прокручивается с отличной от остального фона скоростью. Для художников и дизайнеров трюк заключался в том, чтобы учитывать то, что фон по-прежнему является одним плоским изображением. Если платформа или любой другой элемент, который должен находиться «перед» медленно движущимся фоном, помещается в эту область, то он тоже будет скроллиться медленнее, чем остальная часть изображения. Это значит, что дизайнерам приходилось располагать фоновые элементы в сцене таким образом, чтобы эффект не искажался.

8 бит персонаж для игры

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

Существует и ещё один трюк, благодаря которому художники могли «переместить» один из фоновых элементов вперёд. На NES разработчики могли сделать так, чтобы приоритет спрайта был меньше нуля. Если это сделать, то спрайт будет отображаться под всеми непрозрачными пикселями фона. Приоритеты спрайтов тоже можно изменять и переключать на лету, благодаря чему отдельные элементы могут при необходимости менять приоритет спрайта.

Рабочие процессы Unity для создания максимального ощущения ретро

Mega Cat Studios из Питтсбурга, штат Пенсильвания, превратила создание ретро-игр в форму искусства. На самом деле некоторые из их игр даже можно приобрести на картриджах и сыграть в них на таких ретро-консолях, как Sega Genesis.

8 бит персонаж для игры

8 бит персонаж для игры

Little Medusa и Coffee Crisis

Недавние изменения в рабочих процессах Unity превратили движок в среду, очень хорошо подходящую для создания ретро-игр. Система 2D Tilemap была усовершенствована и теперь поддерживает тайловые карты из прямоугольных, шестиугольных и изометрических тайлов! Кроме того, можно воспользоваться новым компонентом Pixel Perfect Camera, чтобы добиться целостного попиксельного движения и графических эффектов. Можно даже использовать стек постобработки для добавления всевозможных красивых экранных ретро-эффектов. Однако прежде чем всё это делать, необходимо правильно импортировать и настроить ассеты.

Подготовка спрайтовых ассетов

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

8 бит персонаж для игры

Другие режимы фильтрации приводят к небольшому размытию изображения, что нарушает чёткий пиксельный стиль, к которому мы стремимся. При использовании Compression данные изображений сжимаются, что приводит к небольшому снижению точности. Это важно учитывать, потому что из-за сжатия некоторые пиксели могут сменить цвет, потенциально изменив всю цветовую палитру.

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

8 бит персонаж для игры

Обычное сжатие / Изображение без сжатия — выглядит точно так же, как оригинал

Ещё один аспект, который нужно учитывать — это параметр Max Size изображения в Inspector. Если спрайтовое изображение имеет по любой из осей размер больше, чем свойство Max Size (по умолчанию оно равно 2048), то оно будет автоматически подогнано под максимальный размер. Обычно это приводит к потере качества и изображение начинает выглядеть расплывчатым. Так как некоторые платформы не могут поддерживать текстуры размером более 2048 по любой из осей, лучше всего будет оставаться в этих пределах.

8 бит персонаж для игры

Max size имеет значение 2048 / А теперь max size равен 4096

На изображении выше показан спрайт из листа спрайтов (спрайтшита), имеющего по одной оси размер 2208 при max size равном 2048. Как видите, увеличив свойство Max Size до 4096, мы смогли обеспечить правильный размер изображения без потери качества.

Наконец, при подготовке спрайта или листа спрайтов необходимо установить параметру pivot unit mode значение Pixels вместо Normalized.

8 бит персонаж для игры

Благодаря этому опорная точка (pivot point) изображения будет определяться на основе пикселей, а не в плавном интервале от 0 до 1 по каждой оси изображения. Если опорная точка спрайта не будет точно привязана к пикселю, то мы потеряем расположение спрайта с точностью до пикселя. Опорные точки для спрайтов можно задавать в редакторе Sprite Editor, который открывается в Inspector, когда выбран ассет спрайта.

8 бит персонаж для игры

Установка пакета 2D Pixel Perfect

Подготовив ассеты, мы можем сделать камеру пиксельно-точной (pixel perfect). Пиксельно-точный результат будет выглядеть чётким и ярко выраженным. Признаками неточного пиксель-арта становятся размытость (искажение) и прямоугольность некоторых пикселей.

Пакет 2D Pixel Perfect можно импортировать при помощи Package Manager движка Unity. Нажмите в панели инструментов на меню Window, а затем выберите Package Manager. В новом окне нажмите на Advanced и поставьте флажок Show preview packages. Выберите в списке слева 2D Pixel Perfect, а затем нажмите Install в правом верхнем углу окна.

8 бит персонаж для игры

Вот и всё. Теперь вы готовы начать работу с компонентом пиксельно-точной камеры.

Высокий уровень пиксельной точности

Компонент Pixel Perfect Camera добавляется к компоненту Camera движка Unity и дополняет его. Чтобы добавить его, перейдите к основной камере и добавьте к ней компонент Pixel Perfect Camera. Если компонента Pixel Perfect Camera в меню нет, то выполните описанные выше действия, чтобы импортировать его в проект.

8 бит персонаж для игры

Теперь давайте изучим имеющиеся параметры.

8 бит персонаж для игры

Сначала я рекомендую включить «Run In Edit Mode» и установить в окне Game режим соотношения сторон «Free Aspect», чтобы можно было свободно изменять окно игры. Компонент будет отображать в окне игры полезные сообщения, указывая, является ли отображение пиксельно-точным в текущем разрешении.

8 бит персонаж для игры

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

8 бит персонаж для игры

1. Оригинал (без поворота) 2. Без Upscale Render Texture (с поворотом на 45 градусов, пиксельная точность потеряна, потому что размер пикселе по диагональным краям варьируется) 3. С Upscale Render Texture (поворот на 45 градусов, пиксельная точность сохраняется, все пиксели имеют одинаковый размер, но спрайт по сравнению с оригиналом выглядит менее точным.)

8 бит персонаж для игры

Слева Pixel Snapping отключен. Фон находится в позиции (0, 0), а спрайт персонажа — в (1.075, 0). Некоторые пиксели выровнены неверно. Заметьте, что некоторые пиксели накрыты тенью только наполовину. Справа Pixel Snapping включен. Те же позиции — фон в (0, 0), спрайт персонажа в (1.075, 0). Пиксели идеально привязаны друг к другу.

8 бит персонаж для игры

Персонаж и фон, размытые stretch fill

Рекомендации по использованию Pixel Perfect Camera

Если вам нужно пиксельно-точное отображение с привязкой к сетке, то я рекомендую следующее:

В панели инструментов Unity можно зайти в пункт Edit > Project Settings > Player и ограничить соотношения сторон, поддерживаемые игрой. Если вы обнаружите, что определённая конфигурация выглядит хорошо в нужном вам соотношении, но плохо подходит к отдельным соотношениям, то здесь можно отключить эти соотношения. Однако учитывайте, что не у всех пользователей экран будет хорошо совместим с вашими ограничениями, поэтому так делать не рекомендуется. Вместо этого используйте cropping, чтобы у таких пользователей отображались чёрные границы, и игра не запускалась в разрешении, не соответствующем их экрану.

Источник

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

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