Уничтожители (Destroyers)




Уничтожители «убивают» частицы, как только они входят в область уничтожения. Системы частиц могут содержать множество уничтожителей. Уничтожитель имеет следующие свойства:

  • xmin, xmax, ymin, ymax ззадаёт координаты области уничтожения частиц.
  • shape указывает форму области уничтожения. Может принимать следующие значения:
    • ps_shape_rectangle – форма прямоугольник
    • ps_shape_ellipse - форма эллипс
    • ps_shape_diamond – форма ромб

Следующие функции задают свойства уничтожителей (как первый аргумент у всех стоит индекс системы частиц):

part_destroyer_create(ps) Создаёт уничтожитель в системе частиц с индексом ps и возвращает индекс ind, который должен использоваться во всех нижеследующих функциях.
part_destroyer_destroy(ps,ind) Удаляет уничтожитель с индексом ind из системы частиц с индексом ps.
part_destroyer_destroy_all(ps) Удаляет все существующие уничтожители в системе частиц с индексом ps.
part_destroyer_exists(ps,ind) Возвращаетtrue, если уничтожитель с индексом ind существует в системе частиц с индексом ps.
part_destroyer_clear(ps,ind) Очищает уничтожитель с индексом ind в системе частиц с индексом ps, возвращая все его установки по умолчанию.
part_destroyer_region(ps,ind,xmin,xmax,ymin,ymax,shape) Задаёт область уничтожителя с индексом ind в системе частиц с индексом ps.

Преобразователи (Changers)

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

  • xmin, xmax, ymin, ymax задаёт координаты области в которой преобразуются частицы.
  • shape указывает форму области преобразования. Может принимать следующие значения:
    • ps_shape_rectangle – форма прямоугольник
    • ps_shape_ellipse - форма эллипс
    • ps_shape_diamond – форма ромб
  • parttype1 указывает тип частиц, которые изменяются.
  • parttype2 указывает тип частиц, в который преобразуются частицы попавшие в область преобразования.
  • kind задаёт тип преобразователя. Может принимать следующие значения:
    • ps_change_motion изменяются только параметры движения, такие парметры как форма, цвет, размер не меняются.
    • ps_change_shape изменяются только параметры размера, такие как форма, размер, цвет.
    • ps_change_all иизменят все параметры, т.е. старые частицы уничтожаются, и вместо них появляются новые частицы указанного типа.

Следующие функции настраивают свойства преобразователей (в качестве первого аргумента, у всех функций стоит индекс системы частиц):

part_changer_create(ps) Создаёт преобразователь в системе частиц с индексом ps и возвращает индекс ind, который должен использоваться во всех нижеследующих функциях.
part_changer_destroy(ps,ind) Удаляет преобразователь с индексом ind из системы частиц с индексом ps.
part_changer_destroy_all(ps) Удаляет все существующие преобразователи в системе частиц с индексом ps.
part_changer_exists(ps,ind) Возвращаетtrue, если преобразователь с индексом ind существует в системе частиц с индексом ps.
part_changer_clear(ps,ind) Очищает преобразователь с индексом ind в системе частиц с индексом ps, возвращая все его установки по умолчанию.
part_changer_region(ps,ind,xmin,xmax,ymin,ymax,shape) Задаёт область преобразователя с индексом ind в системе частиц с индексом ps.
part_changer_types(ps,ind,parttype1,parttype2) Задаёт типы преобразуемых частиц для преобразователя с индексом ind в системе частиц с индексом ps.
part_changer_kind(ps,ind,kind) Задаёт тип kind преобразователя с индексом ind в системе частиц с индексом ps.

Пример фейерверка

Здесь приведён пример того, как с помощью частиц создать фейерверк. Фейерверк использует два типа частиц: первый для ракет, второй - для салютов. Частицы-ракеты во время смерти создают частицы-салюты. Кроме того, создаётся потоковый генератор, который выпускает ракеты снизу экрана. Чтобы проверить, как это работает, Вам нужно создать объект и в его событии создания поместить код, который создаст типы частиц, систему частиц и генератор:

{ // создание системы частиц ps = part_system_create(); // частицы фейерверкаpt1 = part_type_create(); part_type_shape(pt1,pt_shape_flare); part_type_size(pt1,0.1,0.2,0,0); part_type_speed(pt1,0.5,4,0,0); part_type_direction(pt1,0,360,0,0); part_type_color1(pt1,c_red); part_type_alpha2(pt1,1,0.4); part_type_life(pt1,20,30);part_type_gravity(pt1,0.2,270); // ракета pt2 = part_type_create(); part_type_shape(pt2,pt_shape_sphere); part_type_size(pt2,0.2,0.2,0,0); part_type_speed(pt2,10,14,0,0); part_type_direction(pt2,80,100,0,0); part_type_color2(pt2,c_white,c_gray); part_type_life(pt2,30,60); part_type_gravity(pt2,0.2,270); part_type_death(pt2,150,pt1); // create the firework on death // созданиегенератораem = part_emitter_create(ps); part_emitter_region(ps,em,100,540,480,490,ps_shape_rectangle,ps_distr_linear); part_emitter_stream(ps,em,pt2,-4); // create one every four steps}

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

Оптимизация

Если Вы делаете сложные игры, Вам точно нужно сделать их как можно более оптимизированными. Даже если Game Maker делает всё возможное для их оптимизации, много зависит и от Вас. Ведь очень просто сделать игру, которая будет использовать очень много памяти. Здесь мы расскажем Вам о том, как ускорить и уменьшить вашу игру.

Во-первых, следите за вашими спрайтами и фонами. Анимированные спрайты занимают много памяти. Рисование множества спрайтов одновременно также не ускорит вашу игру. Так что делайте ваши спрайты как можно более маленькими. Убирайте все невидимые области вокруг него (команда Crop в редакторе спрайтов сделает это автоматически). То же самое касается и фонов. Если у Вас фон на всю комнату, убедитесь, что выключили цвет фона.

Если Вы используете полный экран, убедитесь, что размер комнаты (или окна) не больше размера экрана. Большинство графических карт нормально могут растянуть изображение, но намного медленнее они их сжимают! Когда это возможно, отключайте курсор. Он замедляет графику.

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

Кроме графики есть ещё несколько аспектов, уменьшающих скорость. Например, убедитесь в том, что у Вас как можно меньше экземпляров объектов. Для этого удаляйте ненужные экземпляры (т.е. когда они вне комнаты). Избегайте огромных кодов в событиях шага или рисования. Обычно не всё нужно проверять каждый шаг. Например, некоторые функции и действия занимают много времени; особенно те, что проверяют все экземпляры (вроде действия рикошета).

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

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

Аккуратно используйте большие звуковые файлы. Они занимают много памяти и плохо сжимаются. Если хотите, проверьте все звуки и посмотрите, какие можно убрать.

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

В этой вкладке Вы можете изменить несколько настроек, задающий, как обрабатывать ошибки.

Display error messages (Показывать ошибки)
При включении игроку будут показываться ошибки. В финальной версии игры Вам лучше выключить это.

Write error messages to file game_errors.log (Записывать ошибки в файл game_errors.log)
Если включить, все ошибки будут записываться в файл game_errors.log в папке с игрой.

Abort on all error messages (выходить при любой ошибке)
Обычно нужно выходить только из-за фатальной ошибки, а остальные - игнорировать. Если включить, то любая ошибка, будто фатальная, завершит игру. В финальной версии лучше убрать это.

Treat uninitialized variables as 0 (Использовать вместо неизвестных переменных 0)
Одна из частых ошибок в том, что используются переменные без значения. Обычно это трудно избежать. При включении этой настройки неизвестные переменные не будут ошибкой, так как будут замещаться 0. Осторожнее. Это может означать, что Вы не заметите ошибку вроде опечатки в названии переменной.

Настройки загрузки

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

Можно задать и прозрачность картинки загрузки. Для этого левый-нижний пиксель будет использоваться как цвет прозрачности. (Запомните, это что здесь не учитывается прозрачность из png/gif-файлов!). Также можно задать полупрозрачность. 0 - полная прозрачность. 255 - полная непрозрачность. (Оба работают начиная с Windows 2000).

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

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

Другие настройки В этой же вкладке можно задать несколько дополнительных настроек. Во-первых - настроить некоторые кнопки: Let <Esc> end the game (Позволить выходить из игры по нажатию <Esc>) Если включить, нажатие на escape завершит игру. В более продвинутых играх Вам этого не нужно, потому что нужно сделать что-нибудь перед завершением (сохранить, например). Для этого уберите галочку и настройте свои действия для кнопки escape. Treat the close button as <Esc> key (Обработка нажатия кнопки закрытия как клавиши <Esc>) При включении нажатие кнопки выхода на окне будет выполнять действия для кнопки escape. Если выключить, кнопка выхода будет просто закрывать окно. Let <F1> show the game information (Показывать справку по нажатию <F1>) При включении нажатие F1 отобразит справку. Let <F4> switch between screen modes (Сменить полноэкранность по нажатию <F4>) При включении F4 будет менять полноэкранный режим на оконный и наоборот. Let <F5> save the game and <F6> load a game (Сохранятьсяпонажатию<F5> и загружаться по нажатию <F6>) Если включить, игрок сможет использовать <F5> для сохранения данной ситуации в игре и <F6> для загрузки последнего сохранения. (Запомните, только самое главное будет сохранено. Продвинутые функции вроде частиц или структур данных не будут сохраняться и Вы должны будете сделать свой механизм сохранения для них. Let <F9> take a screenshot of a game (Делатьскриншотпонажатию<F9>) При включении игрок сможет использовать <F9> для создания скриншотов. Скриншот будет сохранён в screenshotXXX.png в папке с игрой, где XXX - номер скриншота. При создании нескольких скриншотов номер будет автоматически увеличиваться. Можно также задать приоритет игры. Приоритет показывает, сколько времени процессор должен уделять игре. Обычный приоритет означает, что ОС пытается использовать процессор для каждого процесса, сколько тому нужно. Увеличивая его, Вы отдаёте больше времени игре, делая её плавнее и быстрее. Но на остальные процессы остаётся меньше времени (также процессы Windows, где мыши уже не нужно двигаться). Осторожно используйте это. Наконец, можно задать информацию о версии игры. Эта информация показывается в подсказке, всплывающей, когда пользователь задерживает курсор на exe-файле игры. Также она показывается, когда игрок правой кнопкой вызывает окно Свойств файла и закладку о версии. Если Вы распространяете игру, лучше заполнить эти поля. Нужно задать версию игры, состоящую из четырёх частей: основная версия, дополнительная, номер выпуска и номер сборки. Также нужно задать имя компании (или ваше), название продукта, информацию о копирайте и очень короткое описание. Содержимое каждого из этих полей может быть в 64 символа.

Справка

В хорошей игре игроку подробно рассказывается о том, как играть в неё. Обычно это можно прочитать, нажав кнопку <F1> во время игры. В Game Maker есть простой встроенный механизм для обеспечения игры справкой. Конечно, у него ограниченные возможности. Конечно красивее будет, если создать справку самому, используя специальные комнаты или заставки с html-страницами, например.

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

В меню File можно найти пункт Options. Обычно справка показывается в окне игры, а сама она приостанавливается. Используя этот пункт Вы можете задать, отобразить справку в специальном окне, заголовок окна справки, а также позицию окна (-1 - отображение по центру) и его размеры. Можно также задать, должна ли у него быть граница и можно ли игроку его растягивать. Вы можете сделать так, чтобы окно всегда оставалось поверх остальных и чтобы игра не прекращалась, когда отображается справка.

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

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

Настройки графики

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

Start in fullscreen mode (Запуск игры в полноэкранном режиме)
При выборе игра будет запущена на полный экран; если не выбирать, она запустится в окне.

Scaling (Масштабирование)
Здесь Вы задаёте, что произойдёт с окном, если оно больше комнаты или если оно запущено в полноэкранном режиме. Есть три варианта. Можно использовать неизменяемое масштабирование. Комната будет растягиваться по центру окна или экрана. 100 - без растягивания. Обычно этот тип используется, если у Вас маленькие комнаты и спрайты. Второй вариант - растянуть комнату полностью, сохраняя пропорции. Третий вариант - растянуть так, чтобы окно или экран были заполнены полностью. Это может привести к искажению изображения (особенно если размер окна можно изменять).

Interpolate colors between pixels (Интерполировать цвета между пикселями)
При включении цвета пикселей в спрайтах, фонах и тайлах, не связанные с экраном, будут интерполированы. В частности, это используется когда они масштабируются, поворачиваются или распологаются в дробных позцииях. Интерполяция делает движение более сглаженным, но при этом может дать эффект размытия. (Также это может привести к прожилкам между тайлами, если неправильно их использовать.)

Color outside the room region (Цвет вне комнаты)
Когда комната не полностью заполняет окно, появляется небольшая часть вокруг неё. Так Вы можете задать её цвет.

Allow the player to resize the game window (Разрешить изменение размеров окна)
Если включить, то пользователь сможет изменять размеры окна, двигая их углы мышью.

Let the game window always stay on top (Всегда быть "в фокусе")
При включении в оконном режиме игра будет всегда "в фокусе", т.е. поверх остальных окон.

Don't draw a border in windowed mode (Не рисовать границы)
Если включить, в оконном режиме у окна не будет границ и заголовка.

Don't show the buttons in the window caption (Не показывать кнопки у заголовка окна)
выбрав это, в оконном режиме у заголовка окна не будут отображаться кнопки закрытия и сворачивания/разворачивания.

Display the cursor (Отображать курсор)
Задаёт, хотите ли Вы использовать курсор мыши. Отключение обычно ускоряет и делает игру приятной. (Можно сделать и собственный объект для курсор в Game Maker.)

Freeze the game when the form loses focus (Останавливать игру, когда она "вне фокуса")
Если включить, то у игрока при переключении на другие окна игра будет останавливаться, пока он снова на неё не переключится.

Disable screensavers and power saving actions (Отключить скринсейверы и энергосберегающие действия)
Если выбрано (по умолчанию), скринсейверы или энергосберегающие действия (сон, гибернация) не будут активироваться, если игра запущена. Это важно, ведь это может уничтожить важные части графики вашей игры (вроде сурфейсов).

Разрешение

В этой вкладке Вы можете настроить разрешение экрана, в котором ваша игра должна запускаться. Обычно оно не меняется. Но иногда Вам нужно запускать игру в низком разрешении, чтобы убедиться, что во время игры размер экрана нужный. Если хотите сменить разрешение, Вам нужно поставить галочку Set the resolution of the screen (Изменить разрешение экрана).

Вы сможете изменить три вещи. Во-первых - глубину цвета. Так задаётся количество битов, используемых для передачи цвета пикселя. Большинство компьютеров позволяет использовать только 16-битный (High Color) или 32-битный (Full Color), но на более старых также доступны 8-битный и, иногда, 24-битный. Game Maker корректно работает только в 16-битном и 32-битном цвете. 32-битный даёт более красивые изображения, но использует больше памяти и времени. Если хотите, чтобы игра запускалась и на старых компьютерах, задайте глубину на 16-битную. Или используйте 32-битную и не меняйте.

Во-вторых, само разрешение экрана, количество пикселей (по горизонтали и по вертикали) на экране. Изменение разрешения полезно, когда ваши комнаты очень маленькие. В таком случае может помочь уменьшение разрешения. Поймите, что это отразится и на других запущенных приложениях. Так что могут появиться проблемы с низкими разрешениями. Так что лучше просто запускать игру на полный экран. Да, и ещё - Game Maker автоматически настроит разрешение обратно, когда игра завершится.

Наконец, можно сменить частоту обновления. Она задаёт, сколько раз в секунду нужно обновлять изображение на экране. Если скорость ваших комнат больше частоты обновления, не все шаги будут отображаться. Лучше всё это работает, если частота обновления равна скорости комнаты. (Если Вы зададите слишком высокую частоту или она будет недоступна, частота меняться не будет.)

Также есть настройка Use synchronization to avoid tearing (Использовать синхронизацию для избежания рывков). Нужно это как-нибудь объяснить. Экран перерисовывается несколько раз в секунду, в зависимости от частоты обновления. Если комната перерисовывается на середине обновления, то на верхней части экрана всё равно будет отображено старое изображение, хотя нижняя его часть будет обновлена. Это называется рывком. Для избежания этого нужно выбрать эту настройку. Тогда новое изображение комнаты будет только копироваться на экран, когда обновление завершится, чаще всего поможет избежать рывков. Отрицательная сторона в том, что нам обычно нужно будет ждать нового обновления. Это значит, что максимальное количество кадров будет ограничено частотой обновления монитора и, когда процесс будет не настолько быстрым, количество кадров упадёт до половины этой частоты. Также может произойти конфликт между внутренним временем игры и синхронизацией. Если хотите использовать это, задайте частоту монитора на 60 и задайте скорость комнаты на 30 или 60.

 

   

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-12-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: