ГлавнаяРегистрацияВход
Приветствую Вас Гость | RSS
Главная » Статьи » Game Maker » Game Maker

Изменение ресурсов

Изменение ресурсов

Эти функции доступны только в Pro издании Game Maker.

Также возможно создание новых ресурсов в течение игры. Вы можете изменять существующие ресурсы. Эта глава описывает эти возможности. Всё же предупреждаем. Изменение ресурсов может легко повлечь к возникновению ошибок в Ваших играх!!! Вы должны следовать следующим правилам при изменении ресурсов:

  • Не изменяйте ресурсы, которые используются. Это приведёт к ошибкам! Например, не изменяйте спрайт, который используется образцом объекта.
  • Когда Вы сохраняете игру в течение игрового процесса, добавленные и/или изменившиеся ресурсы НЕ сохраняются в "сохранёнках". Так что если Вы загружаете сохранённую игру позже, то изменённых ресурсов в ней не будет. В общих чертах, когда Вы манипулируете ресурсами, Вы не можете больше использовать встроенную систему загрузки и сохранения игр.
  • Когда Вы перезапускаете игру в течение игрового процесса, изменённые ресурсы НЕ восстанавливаются в их оригинальную форму. В общих чертах, когда Вы обрабатываете ресурсы - Вы не можете больше использовать действие или функцию для перезапуска игры.
  • Обработка ресурсов может быть медленной. Например, изменение спрайтов или фонов происходит сравнительно медленно. Так что не используйте это в течение игрового процесса.
  • Создание ресурсов в течение игры (в частности спрайтов и фонов) легко использует огромный объём памяти. Так что будьте чрезвычайно осторожны с этим. Например, если у Вас есть 32 фреймовых 128x128 анимированных спрайта, и Вы решаете создать 36 вращающихся копий, то Вы израсходуете 36x32x128x128x4 = 72 = МБ памяти!
  • Убедитесь, что Вы удаляете все ресурсы, которые Вам больше не нужны. В противном случае система скоро испытает недостаток памяти.

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

Информация об изменении ресурсов может быть обнаружена на следующих страницах:

Спрайты
Звуки
Фоны
Шрифты
Пути
Сценарии
Тайм-лайны
Объекты
Комнаты

 

Спрайты

 

Для изменения свойств спрайта доступны следующие подпрограммы:

sprite_set_offset(ind,xoff,yoff) Устанавливает начальную точку спрайта с заданным индексом ind.
sprite_set_bbox_mode(ind,mode) Устанавливает определение прямоугольника, использующегося для просчёта столкновений спрайта ind. (0=автоматический режим, 1=всё изображение, 2=координаты устанавливаются вручную).
sprite_set_bbox(ind,left,top,right,bottom) Определяет месторасположение на спрайте ind прямоугольника. Функция может быть использована при условии, что режим прямоугольника определён, как задаваемый вручную.
sprite_set_precise(ind,mode) Устанавливает улучшенную проверку для событий столкновений спрайта с именем ind (ложь или истина).

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

sprite_duplicate(ind) Создаёт дубликат спрайта с именем ind. Возвращает имя созданного спрайта. Если происходит ошибка, возвращается значение -1.
sprite_assign(ind,spr) Назначает указанному спрайту спрайт с именем ind. Итак, это делает копию спрайта. Таким образом, Вы можете легко установить существующий спрайт вместо другого.
sprite_merge(ind1,ind2) Объединяет спрайт с именем ind1 со спрайтом с именем ind2. Если их размеры не совпадают, то они масштабируются так, чтобы размеры стали одинаковыми. Спрайт ind2 не удаляется!
sprite_add(fname,imgnumb,precise,transparent,smooth,preload,xorig,yorig) Добавляет изображение сохранённое в файле с именем fname в набор спрайтовых ресурсов. Для этого доступны многие форматы изображений. Если изображение не является gif, то такое изображение может быть стрипом, содержащим множество частей изображений для спрайта. Используйте imgnumb, чтобы указать их число (1 для одиночного изображения). Для (анимированных) gif изображений этот аргумент не используется, так как gif файл использует определённое количество изображений. precise - указывает, должна ли использоваться проверка точного столкновения. transparent - указывает прозрачность изображения. smooth - указывает сглаживание краёв. preload - указывает предварительную загрузку изображения в память. xorig и yorig - указывают первоначальную позицию спрайта. Функция возвращает индекс нового спрайта, который Вы можете затем использовать, чтобы его нарисовать, или использовать для этого переменную sprite_index. Когда происходит ошибка - возвращается -1.
sprite_add_alpha(fname,imgnumb,precise,preload,xorig,yorig) Добавляет изображение сохранённое в файле с именем fname в набор спрайтовых ресурсов, но в этот раз файл имеет альфа канал для указания прозрачности (например в .png файлах). Параметры те же самые, какие и выше (но два отсутствуют, поскольку они не уместны в данном случае). Когда происходит ошибка - возвращается -1.
sprite_replace(ind,fname,imgnumb,precise,transparent,smooth,preload,xorig,yorig) Также как и выше, но в этом случае, спрайт с индексом ind заменяется. Функция возвращает, если успешна.
sprite_replace_alpha(ind,fname,imgnumb,precise,preload,xorig,yorig) Также как и выше, но в этом случае, файл имеет альфа канал. Функция возвращает, если успешна.
sprite_create_from_screen(x,y,w,h,precise,transparent,smooth,preload,xorig,yorig) Создаёт спрайт, копируя указанную область экрана. Это делает возможным создавать любой спрайт, который Вы хотите. "Сфотографируйте" изображение экрана, используя эти функции, а затем создайте из него спрайт. (Если Вы этого не делаете в событии рисования, то можете это сделать таким образом. Это не заметно на экране и его обновляет.) Другие параметры - как и прежде. Функция возвращает индекс нового спрайта. Но некоторые предупреждения здесь всё-таки будут. Даже если мы говорим об экране, то это действительно "рисующий регион" этих материалов. То, что есть окно на экране, и что изображение может масштабироваться в этом окне - не имеет значения.
sprite_add_from_screen(ind,x,y,w,h) Добавляет область экрана, как следующую часть изображения спрайту с индексом ind.
sprite_create_from_surface(id,x,y,w,h,precise,transparent,smooth,preload,xorig,yorig) Создаёт спрайт, копируя заданную область из поверхности с заданным id. Это позволяет создать любой желаемый спрайт. Рисуйте изображение на поверхности, используя функции рисования, и затем создайте из этого спрайт. Функция возвращает индекс нового спрайта. Обратите внимание, что альфа величины поддерживаются спрайтом.
sprite_add_from_surface(ind,id,x,y,w,h) Добавляет область поверхности id как следующее подизображение к спрайту с индексом ind.
sprite_delete(ind) Удаляет спрайт с именем ind, освобождая используемую память.

Следующая подпрограмма может использоваться для изменения внешнего вида спрайта.

sprite_set_alpha_from_sprite(ind,spr) Изменяет alpha значение спрайта с индексом ind используя значение цвета спрайта spr. Это не может быть отменено.

 

 

 

Звуки

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

sound_add(fname,kind,preload) Добавляет звуковой ресурс в игру. fname - имя звукового файла. kind - указывает тип звука (0=обычный (wave), 1=фоновый (midi), 2=3D звук, 3=медиа). preload - указывает, должен ли звук предварительно загружаться в аудио память (истина или ложь). Функция возвращает индекс нового звука, который может использоваться для проигрывания звука. (Возвращает -1, если произошла ошибка, например, если файл не существует).
sound_replace(index,fname,kind,preload) Также, как и предшествующая функция, но на этот раз, новый звук не создаётся, но существующий звуковой индекс будет заменён, освобождая при этом старый звук. Возвращает, если всё правильно.
sound_delete(index) Удаляет звук с именем index, освобождая используемую память. Звук не может быть после этого восстановлен.

 

 

Фоны

Следующие подпрограммы могут использоваться для создания и удаления новых фонов.

background_duplicate(ind) Создаёт копию заднего фона с индексом ind. Возвращает имя созданного заднего фона. Если в процессе создания происходит ошибка, функция вернёт значение -1.
background_assign(ind,back) Назначает указанный фон фоном ind. Итак, это делает копию фона.
background_add(fname,transparent,smooth,preload) Добавляет изображение сохранённое в файле с именем fname в набор фоновых ресурсов. Для этого доступны многие типы изображений. transparent - указывает прозрачность изображения. smooth - указывает сглаживание краёв. preload - указывает предварительную загрузку изображения в память. Функция возвращает индекс нового фона, который Вы можете затем использовать, чтобы его нарисовать, или использовать для этого переменную background_index. Когда происходит ошибка - возвращается -1.
background_add_alpha(fname,preload) Добавляет изображение сохранённое в файле с именем fname в набор фоновых ресурсов,но в этот раз файл имеет альфа канал для указания прозрачности (например в .png файлах). Параметры те же самые, какие и выше (но два отсутствуют, поскольку они не уместны в данном случае). Когда происходит ошибка - возвращается -1.
background_replace(ind,fname,transparent,smooth,preload) Также как и выше, но в этом случае, фон с индексом ind будет заменён. Функция возвращает при успешном выполнении. Когда фон к настоящему времени в комнате видимый, то он также замениться.
background_replace_alpha(ind,fname,preload) Также как и выше, но в этом случае, файл имеет альфа канал.
background_create_color(w,h,col,preload) Создаёт фон указанного размера и с заданным цветом. Это возвращает индекс нового фона. Когда происходит ошибка - возвращается -1.
background_create_gradient(w,h,col1,col2,kind,preload) Создаёт фон с градиентным заполнением указанного размера. col1 и col2 - указывают два цвета. kind - является числом между 0 и 5, указывающий тип градиента: 0=горизонтально 1=вертикально, 2=прямоугольник, 3=эллипс, 4=двойные горизонтальные, 5=двойные вертикальные. Возвращает индекс нового фона. Когда происходит ошибка - возвращается -1.
background_create_from_screen(x,y,w,h,transparent,smooth,preload) Создаёт фон, копируя указанную область экрана. Это делает возможным создавать любой фон, который Вы хотите. "Сфотографируйте" изображение на экране, используя эти функции, а затем создайте из него фон. (Если Вы этого не делаете в событии рисования, то Вы можете сделать это таким способом. Это не заметно на экране и его обновляет.) Другие параметры - как и прежде. Функция возвращает индекс нового фона. Но некоторые предупреждения здесь всё-таки будут. Даже если мы говорим об экране, то это действительно "рисующий регион" этих материалов. То, что есть окно на экране, и что изображение может масштабироваться в этом окне - не имеет значения.
background_create_from_surface(id,x,y,w,h,transparent,smooth,preload) Создаёт фон, копируя заданную область из поверхности с заданным id. Это позволяет создать любой желаемый фон. Рисуйте изображение на поверхности, используя функции рисования, и затем создайте из этого фон. Функция возвращает индекс нового фона. Обратите внимание, что альфа величины поддерживаются фоном.
background_delete(ind) Удаляет фон из памяти, освобождая используемую память.

Для изменения внешнего вида фона может использоваться следующая подпрограмма.

background_set_alpha_from_background(ind,back) Изменяет alpha (прозрачность) значение фона с индексом ind, используя значение цвета фона back. Это не может быть отменено.

 

 

Шрифты

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

font_add(name,size,bold,italic,first,last) Добавляет новый шрифт и возвращает свой индекс, указывающий имя, размер и при этом - жирный шрифт или курсив, а также первый и последний символ, который должен быть создан.
font_add_sprite(spr,first,prop,sep) Добавляет новый шрифт и возвращает свой индекс. Шрифт создаётся из спрайта. Спрайт при этом должен содержать часть изображения для каждого символа. first - указывает индекс первого символа в спрайте. Например, используйте ord('0'), если ваш спрайт содержит только цифры. prop - указывает пропорцию шрифта. В пропорциональном шрифта для каждого символа ширина окошек bounding box используется как символьная ширина. Наконец, sep - указывает сумму интервала, который должен разделить символы горизонтально. Типичная величина должна быть между 2 и 8 в зависимости от размера шрифа.
font_replace(ind,name,size,bold,italic,first,last) Заменяет шрифт ind новым шрифтом с указанным именем, размером и при этом - жирный шрифт или наклонный, указывая, какой символ должен быть создан - первый или последний.
font_replace_sprite(ind,spr,first,prop,sep) Заменяет шрифт ind новым шрифтом, основанным на спрайтовой основе.
font_delete(ind) Удаляет шрифт с заданным именем ind, освобождая используемую память.

 

 

Пути

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

path_set_kind(ind,val) Устанавливает тип val соединения точек пути с именем ind. (0=прямое, 1=сглаженное).
path_set_closed(ind,closed) Устанавливает, должен ли путь быть закрытым (истина) или открытым (ложь).
path_set_precision(ind,prec) Устанавливает точность, с которой вычисляется плавный путь (между 1 и 8).
path_add() Добавляет новый путь. Функция возвращает индекс созданного пути.
path_delete(ind) Удаляет путь с индексом ind.
path_duplicate(ind) Создаёт двойную копию пути с заданным индексом. Возвращает индекс копии.
path_assign(ind,path) Назначает указанный путь в путь с именем ind. Итак, это делает копию пути. Таким образом, Вы можете легко установить существующий путь вместо другого.
path_append(ind,path) Добавляет указанный путь к пути ind.
path_add_point(ind,x,y,speed) Добавляет точку в путь с именем ind в точку с координатами (x,y) с указанной скоростью. Помните, что показатель 100 соответствует фактической скорости. Низкие величины обозначают замедление вниз, а высокие - ускорение вверх.
path_insert_point(ind,n,x,y,speed) Включает точку в путь с заданным индексом перед точкой n в позиции (x,y) и с заданным скоростным показателем.
path_change_point(ind,n,x,y,speed) Изменяет точку n в пути с заданным индексом в позиции (x,y) и с заданным скоростным показателем.
path_delete_point(ind,n) Удаляет точку n в пути с заданным индексом.
path_clear_points(ind) Удаляет все точки пути с именем ind.
path_reverse(ind) Возобновляет путь.
path_mirror(ind) Отражает путь по горизонтали (что касается своего центра).
path_flip(ind) Перебрасывает путь по вертикали (что касается своего центра).
path_rotate(ind,angle) Вращает счётчик пути по часовой стрелке над градусами угла (вокруг своего центра).
path_scale(ind,xscale,yscale) Масштабирует путь с заданными показателями (из своего центра).
path_shift(ind,xshift,yshift) Сдвигает путь над заданной суммой.

 

 

Сценарии

Сценарии не могут быть изменены в течение выполнения игры. Сценарии являются логичеcкой частью игры. Изменение сценариев должно привести к "само-перезаписи" кода, что очень легко приводит к ошибкам. Также для этого имеются другие пути. Если Вам действительно нужно выполнить часть кода, что неизвестно в проектном времени (например, из файла), Вы можете использовать следующие функции:

execute_string(str,arg0,arg1,...) Запускает на выполнение блок кода, записанный в строку str.
execute_file(fname,arg0,arg1,...) Запускает на выполнение блок кода, записанный в файл с именем fname.

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

script_execute(scr,arg0,arg1,...) Выполняет сценарий с индексом scr с заданными аргументами.<>

 

 

Тайм-лайны

Следующие подпрограммы доступны для создания и изменения тайм-лайнов. Не изменяйте тайм-лайны, которые используются!

timeline_add() Добавляет новый тайм-лайн. Функция возвращает имя созданного тайм-лайна.
timeline_delete(ind) Удаляет тайм-лайн с заданным индексом ind. Убедитесь, что никакие образцы не используют удаляемый тайм лайн в любой из используемых комнат.
timeline_moment_add(ind,step,codestr) Добавляет кодовое действие к тайм-лайну в момент step. codestr - содержит код для действий. Если step (шаг) не существует, то он создаётся. Итак, Вы можете добавить много кодовых действий в течение одного и того же события.
timeline_moment_clear(ind,step) Очищает все действия в течение конкретного события.

 

 

Объекты

Также возможно создание объектов в течение игрового процесса и манипулирование над ними. НИКОГДА не изменяйте или не удаляйте объект, для которого имеются образцы. Это может провести к неожиданным эффектам, так как определённые свойства объекта сохраняются образцом и, следовательно, смена такого объекта не будет иметь желаемого эффекта.

object_set_sprite(ind,spr) Устанавливает спрайт объекта с заданным индексом. Используйте -1, чтобы удалить текущий спрайт из объекта.
object_set_solid(ind,solid) Устанавливает, если образец создан из объекта, который должен по умолчанию быть твёрдым (истина или ложь).
object_set_visible(ind,vis) Устанавливает, если образец создан из объекта, который должен по умолчанию быть видимым (истина или ложь).
object_set_depth(ind,depth) Устанавливает глубину для объекта с индексом ind по умолчанию.
object_set_persistent(ind,pers) Устанавливает, если образец создан из объекта, который должен по умолчанию быть постоянным (истина или ложь).
object_set_mask(ind,spr) Устанавливает в качестве маски спрайт с индексом spr для объекта с именем ind. Использование -1, чтобы устанавливать маску, которая должна быть спрайтом объекта.
object_set_parent(ind,obj) Устанавливает родительский объект для объекта с именем ind. Используйте -1, чтобы не иметь родительский объект с именем obj. Изменение родительских объектов изменяет поведение образцов объекта.

Следующие подпрограммы полезны для создания объектов "на лету". Как и все программы изменений ресурсов - требует особой осторожности. Убедитесь, что Вы не создаёте объекты постоянно.

object_add() Добавляет новый объект. Возвращает индекс объекта. Вы можете теперь использовать этот индекс в вышеуказанных программах, чтобы устанавливать определённые свойства объекта. Затем Вы можете использовать индекс, чтобы создавать образцы объекта.
object_delete(ind) Удаляет объект с заданным индексом. Убедитесь, что никакие образцы объекта не существуют в любой из комнат.
object_event_add(ind,evtype,evnumb,codestr) Чтобы задать объекту поведение, Вы должны определить событие для объекта. Вы можете добавить кодовые действия к основным событиям. Вам нужно определить объект, тип события, номер события (используйте константы, которые определены перед функцией event_perform()). Наконец Вы обеспечиваете кодовую строку, которая должна быть выполнена. Вы можете добавить многочисленные кодовые действия к каждому событию.
object_event_clear(ind,evtype,evnumb) Вы можете использовать эту функцию, чтобы очищать все действия для конкретного события.

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

 

Комнаты

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

Доступны следующие подпрограммы :

room_set_width(ind,w) Устанавливает ширину w для комнаты с индексом ind.
room_set_height(ind,h) Устанавливает высоту h для комнаты с индексом ind.
room_set_caption(ind,str) Устанавливает заголовок окна str для текущей комнаты с индексом ind.
room_set_persistent(ind,val) Устанавливает, если комната с индексом ind является постоянной.
room_set_code(ind,str) Определяет блок кода str, который выполнится при инициализации комнаты с индексом ind.
room_set_background_color(ind,col,show) Устанавливает цвет col заднего фона комнаты с индексом ind, если она не использует изображение в качестве заднего фона. Аргумент show - устанавливает, показывать ли выбранный цвет.
room_set_background(ind,bind,vis,fore,back,x,y,htiled,vtiled,hspeed,vspeed,alpha) Устанавливает задний фон с индексом связи (от 0 до 7) для комнаты с индексом ind. Аргумент vis - указывает, является ли задний фон видимым. fore - указывает, является ли изображение передним фоном. back - содержит индекс добавляемого заднего фона. x и y отражают координаты по соответствующим осям, в которых будет создан задний фон. htiled и vtiled - указывают, должно ли изображение быть изразцовым (замощено по горизонтали и вертикали). hspeed и vspeed - указывают скорость перемещения фона. alpha - указывает степень прозрачности (1 = непрозрачное и самое быстрое).
room_set_view(ind,vind,vis,xview,yview,wview,hview,xport,yport,wport,hport,hborder,vborder,hspeed,vspeed,obj) Устанавливает вид с индексом vind (от 0 до 7) для комнаты с индексом ind. Аргумент vis - устанавливает, является ли задаваемый вид видимым. Аргументы left,top,width,height устанавливают соответственно координаты левой верхней точки вида с указанной шириной и высотой. Если вид должен следовать за объектом с индексом obj, то аргументы hborder и vborder устанавливают минимальное дистанцию от объекта до края вида. Аргументы hspeed и vspeed устанавливают соответственно горизонтальную и вертикальную скорости следования вида за объектом.
room_set_view_enabled(ind,val) Устанавливает, если виды должны быть включены для комнат с указанным индексом.
room_add() Добавляет новую комнату. Это возвращает индекс комнаты. Отметьте, что комната не будет частью последовательности комнат. Так что новая комната нет будет иметь предшествующую или следующую комнату. Если Вы хотите переместиться в дополнительную комнату - Вы должны обеспечить для неё индекс.
room_duplicate(ind) Создаёт дубликат комнаты с индексом ind. Возвращает имя дубликата комнаты.
room_assign(ind,room) Назначает указанную комнату комнате с именем ind. Итак, это делает копию комнаты.
room_instance_add(ind,x,y,obj) Добавляет образец объекта с индексом obj в точку с координатами (x,y) комнаты с индексом ind. Возвращает имя создаваемого образца.
room_instance_clear(ind) Убирает все образцы объектов из комнаты с индексом ind.
room_tile_add(ind,back,left,top,width,height,x,y,depth) Добавляет в комнату с индексом ind тайл. Это возвращает индекс тайла. back - является фоном, из которого потребовался тайл. left,top,width,height - указывают часть фонового изображения, которое формирует тайл. x,y - позиция тайла в комнате. depth - является глубиной тайла.
room_tile_add_ext(ind,back,left,top,width,height,x,y,depth,xscale,yscale,alpha) Также как и предшествующая подпрограмма, но на этот раз Вы можете определить коэффициент масштабирования в x и y направлении и alpha прозрачность для тайла.
room_tile_clear(ind) Удаляет из комнаты с индексом ind все тайлы.<>

 

 

 

 

 

Категория: Game Maker | Добавил: Strateg (27.12.2010)
Просмотров: 2718 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню сайта

-=ЯП=-

Конструктор\Движки

Игроделу

Наш опрос
Какой язык программирования вы знаете/учите?
Всего ответов: 73

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

DiamonD
Бесплатный конструктор сайтов - uCoz