Как сделать тени в game maker

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Привет! Показываю как можно сделать скрытность и стелс в game maker применительно к 2д игре – аркаде, с видом с верху. Как можно сделать тень, скрытность в кустах, подкрадывание, видимость у врагов и т.д. Больше информации в блоге:

Econ Dude

Econ Dude YouTube канал где я, econ dude, делаю видео про: создание игр, game maker studio, программирование, геймдев, разработка игр с нуля, инди игры, графика, дизайн, создание игр для новичков и рисунки. Так-же есть видео про виртономику, экономику и специальная рубрика "ересь" где упоротый хлам. Иногда делаю видео про раскрутку и продвижение. Всем рад моём канале, нигде никого не хотел обидеть, ни к чему не призывал и никого ни на что не возбуждал. (Кроме того, что надо подписаться на канал, поставить лайк и добавить видео в избранное) Новое видео каждые 1-2 недели. Подписывайтесь на канал, вступайте в паблик ВК, читайте блог.

Информация о пользователе

Как сделать инструмент "Тень" поверх всего

Перерыл гугл, сам пытался лазить в скриптах, но так и не нашел способа сделать так, что бы тени добавляемые инструментом "Тень" отображались поверх всех тайлов, а не только поверх тайлов "A". Кто-нибудь знает как это можно сделать?

Рыцарь форума 3 ст.
Помощь - Скриптинг серебряная
Рыцарь форума 4 ст.

Информация о пользователе

Информация о пользователе

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

  • написать код, который читает тень из $game_map.data и отображает её поверх других клеток,
  • а первоначальный код отображения тени отключить (путём установки всей тени в 0, или ещё как-нибудь).

Сама тень хранится в первых четырёх байтах четвёртого слоя $game_map.data[x, y, 3] (биты по порядку дают ЛВ ПВ ЛН ПН, где Л — левый, П — правый, В — верхний, Н — нижний углы клеток соответственно), так что в собственном скрипте это наверняка возможно. Т.е. 1 = тень в левом верхнем полуквадрате, 2 = тень в правом верхнем полуквадрате, 4 — в левом нижнем, 8 — в правом нижнем. Соответственно, тень слева закодируется как 1+4=5. (Учитывайте, что другие биты в $game_map.data[x, y, 3] используются для записи регионов, так что нужно читать именно нужные биты побитовые операторы в Руби: a & 1 будет равно 1, если левая верхняя полуклетка содержит тень, и 0, если она не содержит тени.)

  • Нужно знать Руби, чтобы это сделать.
  • Скорость. Класс Tilemap сделали встроенным, чтобы карта рисовалась быстрее. Если вы заменяете часть его функциональность своим кодом для рисования тени, Ваша игра будет работать медленнее.

N.B. Я не работаю с VX Ace и пост выше написан по результатам краткого подсматривания в код его скриптов. Возможно, существует более простой вариант, о котором я не знаю.

Наработка динамического освещения, построенная на спрайтах и поверхностях (surface). Спрайты определяют форму освещения, например - фонарик игрока. Кроме того, ввиду простоты, игра не глючит из-за большого количества источников освещения в комнате или кадре. Можно задать также цвет окружающей "темноты", её прозрачность и другие параметры.

Важно : Если в игре используется подвижная камера, нельзя использовать привязывание вида к объекту ( view_obj [0. 7]), так как это выдаёт ошибки в позиционировании поверхности "темноты". Камеру (вид, view) нужно двигать вручную. Для этого в наработке есть свой скрипт Light_obj_view (obj), который перемещает камеру за объектом, но, можно написать и свой код для этих целей.

отлично :)

Есть ли способ изменить размер маленьких пикселей на большие, а не размытые ?

не используйте сжатие с потерями для текстур, вместо этого используйте bmp, gif или png, все они поддерживают хранилище без потерь

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

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

Если я правильно помню, у оригинального Spelunky (сделанного в Game Maker) была DLL, которая включала линейное масштабирование. Источник доступен по этой ссылке; посмотри.

Технически это работает, хотя пиксельная графика может измениться из-за увеличения с нецелым коэффициентом (например, 2,5x)

Вы имеете в виду, что они не удосужились сделать это настройкой по умолчанию. Я только что проверил и что по умолчанию в Game Maker 8.0 по умолчанию. Это просто чокнутый . Отличный ответ, кстати.

Никто не хочет иметь дело с необходимостью вручную масштабировать каждый спрайт; Мало того, что это неаккуратное рабочее пространство, но это очень непрофессионально. Я нашел решение, когда отключение интерполяции в глобальных настройках игры не работало.

:) Я надеюсь, что это поможет вам в ваших будущих начинаниях.

Для этого я обычно использую Photoshop или GIMP (масштаб / ближайший сосед)

Снимок из игры, в которой я работаю над банкоматом, спрайт увеличен в самой GM: S

Но чтобы сделать это в редакторе спрайтов GM: S, я использую команду Stretch вместо масштаба и задаю для нее Плохое качество. Это сохранит блочный вид

Выше я играю в банкомате, я так и сделал!

Хотя это работает для масштабирования в определенных разрешениях, но не для всех из них, GM также имеет привычку сжимать текстуры по умолчанию. Это также будет по-разному масштабироваться на разных разрешениях при использовании функции растяжения, это приведет к размытию, которое мы пытаемся избежать. Тем не менее, +1 для (Scale / Nearest Neighbor) упоминания.

Отключите функцию масштабирования на вкладке "Фоны" на карте. Если он кажется не в масштабе, убедитесь, что ваша текстура на заднем плане имеет тот же размер, что и комната / карта, на которой вы находитесь.

В качестве альтернативы используйте этот пост здесь, чтобы создать фоновый скрипт, который увеличит фон с (надеюсь) четкими результатами.

При этом используются поверхности, поэтому, если вам нужна дополнительная помощь по этому вопросу, этот пост содержит много информации.

РЕДАКТИРОВАТЬ:

ШАГ 1 : Выберите нужный масштаб. Используйте представление для каждой комнаты и соответственно масштабируйте порт W и порт H. Так, например, если бы вы использовали шкалу 2 . это выглядело бы так в редакторе комнат GM.

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

ШАГ 2. Создайте 3 сценария: screen_init, screen_begin и screen_end. Вот что входит в каждый из сценариев .

Цитата из: screen_init

Цитата из: screen_begin

Цитата из: screen_end

ШАГ 3 : Теперь у нас есть сценарии, но куда они идут? Создать объект. Например, obj_screen, objScreen, o_screen или что-то еще, и сделайте следующее:

  • A) Поместите screen_initscript в событие Create.
  • B) поместите скрипт screen_begin в событие Begin Step.
  • C) Поместите скрипт screen_end в событие End Step.

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

Вы сделали, и теперь есть хорошее, четкое масштабирование = D

Я хочу масштабировать его без размытия, так как я люблю пиксельные искусства. Так что это не отвечает на мой вопрос. Возможно ли это?

Маловероятно, что студия Game Maker выполняет масштабирование с помощью алгоритма масштабирования с плохим масштабированием, который часто приводит к нежелательному размытию масштабирования. Используйте учебник, который я только что отредактировал в своем ответе, чтобы попробовать четкий фон с масштабированием.

Вы рассматривали возможность предварительного масштабирования фоновой текстуры в графической программе?

Два способа хороши. Сначала объедините некоторые скрипты. Вторая - это предварительное масштабирование изображений перед их использованием.

Читайте также: