Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Автор © 2002 r1ck14 Перевод и адаптация © 2002 Игорь Князев



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

В событии шага (STEP) вашего объекта, поместите действие " If an expression is true " (это иконка со значком Вопроса - найти ее можно во вкладке Question) и в текстовом окне "Expression" укажите выражение: " direction>=45 ". За ним, поместите следующее действие " If " с инструкцией: " direction<=135 ". Далее, поместите действие " Change the sprite " и установите для него спрайт смотрящий "вверх".

Далее, поместите действие " If " содержащее выражение: " direction>135 " и другое действия " If ": " direction<=225 ". В действии замены спрайта объекта, выберите спрайт с направлением персонажа "влево".

Повторяем предыдущие телодвижения, помещаем инструкцию " If " содержащую: " direction>225 " и " direction<=315 " и заменяем спрайт на направленный "вниз".

И наконец, последняя инструкция " If ": " direction > 315 || direction <45 " и меняем спрайт на смотрящий "вправо". Это означает, когда 315 < направление <= 360 или 0 <= направление < 45, появится спрайт направленный вправо.

Предлагаемый вариант действий может оказаться очень полезным, например если Вы в своей игре захотите сделать так, чтобы враги следовали за главным игровым персонажем по всей комнате. Я сделал игру, основанную преимущественно на этом методе, Вы можете увидеть ее заглянув по адресу: http://www.geocities.com/lightspeedfreeware и скачав игру "Bounty Hunter".

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

Надеюсь, что представленная информация окажется Вам полезной.

ЗАМЕЧАНИЕ! Каждую операцию по замене спрайта с действием " Change the sprite " рекомендую окружить блоками " Start Block " и " End Block ".


Скачать пример к данному уроку

Звук и музыка в GML
Звук играет очень ответственную роль в компьютерных играх. Существует два различных типа звуков: фоновая музыка и звуковые эффекты. Фоновая музыка обычно состоит из продолжительной части midi музыки, которая постоянно повторяется. В то время, как звуковые эффекты - это короткие wav файлы. Чтобы получить непосредственный эффект, данные части сохраняются в памяти. В связи с чем заранее проверьте, чтобы они не были слишком длинными.
Звуки добавляются в игру в виде звуковых ресурсов. Проверьте, чтобы названия, которые Вы используете - были допустимыми для имен переменных. В отношении звуков имеется один нюанс, который может сперва озадачить Вас, это количество буферов. Система может проигрывать только один wav файл в одно и тоже время. Это означает, что когда Вы используете эффект повторно, до того как предыдущий звук был завершен, предыдущий звук будет прерван. Согласитесь, что это не очень удобно. Таким образом, когда имеются несколько звуковых эффектов, которые используются одновременно (например ружейные выстрелы) тебе нужно сохранить их несколько раз. Этот число - количество буферов. Чем больше количество буферов определено для звука, тем больше раз он может быть проигран одновременно, но не стоит также забывать, что при этом используется и больше памяти. Поэтому используйте данную возможность с осторожностью. Game Maker автоматически использует первый доступный буфер, поэтому достаточно только указать требуемое число и больше на этот счет не придется волноваться.
Существуют четыре основных функции, связанные с обработкой звука: две - для проигрывания звука, одна - для проверки проигрывается ли звук, и одна для остановки звука. Все они используют индекс звука в качестве параметра. Название звука и является индексом. Но Вы можете также сохранить индекс в переменной и использовать только ее.
sound_play(index) - Проигрывает указанный звук единожды.
sound_loop(index) - Проигрывает указанный звук, в непрерывном цикле.
sound_stop(index) - Останавливает указанный звук. Если существует несколько звуков с данным индексом проигрываемых одновременно, остановлены будут все.
sound_stop_all()- Останавливает все звуки.
sound_isplaying(index) - Возвращает, если проигрывается указанный звук.
Все это также возможно при использования звуковых эффектов. Это относится только к wav файлам, midi файлы для этого не используются. Если Вы хотите использовать определенные звуковые эффекты, то должны указать это во вкладке advanced в свойствах звука, активировав соответствующее поле. Обратите внимание, что звуки, которые содержат эффекты, расходуют большее количество ресурсов чем другие звуки. После того, как в данном поле будет стоять галочка, Вы можете использовать нижеследующие вызовы. Имеются три типа звуковых эффектов. Прежде всего Вы можете изменить громкость. Значение 0 означает полное отсутствие звука. Значение 1 - изначальная громкость звука. (Вы не можете указать громкость большую чем изначальную). Во-вторых, Вы можете изменить панораму (баланс), то есть направление (источник), откуда идет звук. Значение 0 - только слева. Значение 1 указывает, что звук идет только из правого динамика. 0.5 - значение по умолчанию, которое находится по середине. Вы можете использовать баланс, например чтобы услышать как объект шагает слева направо. И наконец Вы можете изменять частоту звука. Это может использоваться например - для изменения скорости двигателя. Значение 0 - самая низкая частота; значение 1 - максимальная частота.
sound_volume(index,value) - Изменяет громкость для указанного звука (0 = тише, 1 = громче).
sound_pan(index,value) - Изменяет панораму для указанного звука (0 = лево, 1 = право).
sound_frequency(index,value) - Изменяет частоту для указанного звука (0 = ниже, 1 = выше).
Звуки используют много ресурсов и большинство систем может сохранять и проигрывать только ограниченное число звуков. Если Вы делаете большую игру, то захотите иметь максимальный контроль над звуками загруженными в память в определенный момент. Вы можете использовать опцию "load-on-use" для звуков, чтобы быть уверенным, что звуки загружаются только тогда, когда они нужны. Хотя существует проблемы, которая может вызвать глюк, когда звук используется впервые. Также, данная опция не сильно поможет, если Вы имеете только одну большую комнату. Для более полного контроля Вы можете использовать следующие функции.
sound_discard(index) - Освобождает память, используемую для указанного звука.
sound_restore(index) - Восстанавливает указанный звук в памяти.
discard_all() - Отказ от всех спрайтов, фоновых изображений и звуков, которые имеют установку "загрузка на использование" (load-on-use).
Когда Ваша игра использует большое количество различных сложных звуков, например, таких как фоновая музыка, то лучше всего не сохранять их все в игре. Так как в результате игровой файл получится очень большого размера. Вместо этого, лучше сохранять их как отдельные файлы к игре и загружать, по мере необходимости. Это также уменьшит время загрузки самой игры. Для этого предназначены три следующих подпрограммы:
sound_add(fname,buffers,effects,loadonuse) - Добавляет звуковой ресурс в игру. fname - название звукового файла. buffers указывают число буферов, которые необходимо использовать, effects и loadonuse указывает, доступны ли звуковые эффекты и должен ли звук быть сохранен во внутренней памяти (true или false). Функция возвращает индекс нового звука, который может использоваться, для проигрывания звука. (-1, если произошла ошибка, например, файл не существует).
sound_replace(index,fname,buffers,effects,loadonuse) - То же самое как и в предыдущей функции, но в данном случае не создается новый звук, а изменяется (заменяется) индекс существующего звука, убирая старый. Возвращае, если корректно.
sound_delete(index) - Удаляет обозначенный звук, освобождая всю память, связанную с ним. Он больше не может быть восстановлен.
ПРЕДУПРЕЖДЕНИЕ: Если в течение игры Вы сохраняете игровое состояние (записываешь игру), добавленные или измененные звуки, в записанной игре, не сохраняются. Таким образом, если Вы позже загрузите записанную игру, их там больше не будет.
Звук - сложный материал. Midi файлы проигрываются, используя стандартный мультимедиа проигрыватель. Одновременно может быть проигран только один midi файл, также следует заметить что не получится использовать midi в качестве звуковых эффектов. Для wav файлов Game Maker использует DirectSound. В данном случае все wav файлы сохраняются в памяти и могут содержать эффекты. Game Maker реально может также проигрывать файлы других музыкальных форматов, если Вы определите их, в частности это касается mp3 файлов. Для их проигрывания используется стандартный мультимедиа проигрыватель. Хотя будьте крайне осторожны. Будут ли проигрываться файлы mp3, зависит от самой системы, а иногда и от другого установленного или запущенного программного обеспечения. Поэтому мы не рекомендуем использовать mp3 файлы, в распространяемых Вами играх.
Также имеется большое количество функций, позволяющих проигрывать музыку прямо с CD:
cd_init()- Должна быть вызвана перед использованием других функций. Также должна вызываться, при замене CD (или просто время от времени).
cd_present()- Возвращает, если CD присутствует в заданном по умолчанию дисководе.
cd_number()- Возвращает число треков на CD.
cd_playing()- Возвращает, если играет CD.
cd_paused()- Возвращает, если CD остановлен (ПАУЗА).
cd_track()- Возвращает номер текущего трека (1=первый).
cd_length()- Возвращает полную продолжительность CD в миллисекундах.
cd_track_length(n)- Возвращает продолжительность трека n CD в миллисекундах.
cd_position()- Возвращает текущую позицию на CD в миллисекундах.
cd_track_position()- Возвращает текущую позицию в треке, который проигрывается в миллисекундах.
cd_play(first,last)- Сообщает CD проигрывать треки с первого до последнего. Если Вы хотите проигрывать весь CD - укажите в качестве параметра 1 и 1000.
cd_stop()- Прекращает проигрывание.
cd_pause()- Приостанавливает проигрывание (ПАУЗА).
cd_resume()- Возобновляет проигрывание.
cd_set_position(pos)- Устанавливает позицию на CD в миллисекундах.
cd_set_track_position(pos)- Устанавливает позицию в текущем треке в миллисекундах.
cd_open_door()- Открывает лоток CD проигрывателя.
cd_close_door()- Закрывает лоток CD проигрывателя.

Использование DLL библиотек в GML
В тех случаях когда функциональные возможности GML - не достаточны для Ваших грандиозных планов, Вы можете реально расширить данные возможности, используя плагины. Плагины должны быть в форме DLL файла (Динамически загружаемых библиотек). В таком DLL файле Вы можете определить функции. Такие функции могут быть написаны на любом языке программирования, которые поддерживают создание DLL (например. Delphi, Visual C++, Visual Basic, и т.д.) Для этого Вам необходимо как минимум знать один из таких языков и иметь навык программирования. Плагины с функциями должны иметь специфический формат. Они могут содержать ноль (zero), один или два параметра, каждый из которых может быть вещественным числом (double in C) или строкой с нулевым символом в конце. Они должны возвращать либо вещественную строку, либо строку с нулевым символом в конце.
В Delphi Вы создаете DLL сначала выбрав, New из меню File и затем выбрав DLL. Далее приводится пример DLL, который Вы можете использовать с Game Maker, написанный в Delphi. (Обратите внимание, что это - Delphi код, а не GML код)!
library MyDLL;
uses SysUtils, Classes;
function MyMin(x,y:real):real; cdecl;
begin
if xend;
var res: array[0..1024] of char;
function DoubleString(str:PChar):PChar; cdecl;
begin
StrCopy(res,str);
StrCat(res,str);
Result:= res;
end;
exports MyMin, DoubleString;
begin
end.
Эта DLL определяет две функции: MyMin, которая берет два реальных параметра и возвращает минимальный из этих двух, и DoubleString, которая удваивает строку. Обратите внимание, что нужно быть внимательным с использованием памяти. Именно поэтому объявлена результирующей глобальная строковая. Также обратите внимание на использование cdecl соглашений о вызовах. Это важно. Как только Вы создали DLL в Delphi, у Вас получается файл MyDLL.DLL. Этот файл должен быть помещен в каталог с Вашей игрой. (Или иное место, где окна могут найти его.)
Чтобы использовать данный DLL в Game Maker, сначала Вы должны определить внешние функции, которые хотите использовать и какой тип параметров они берут. Для этого в GML имеются следующие функции:
external_define0(dll,name,restype)- Определяет внешнюю функцию без параметров. dll - название dll файла. name - название функций. И restype - тип результата. Для этого используйте либо ty_real, либо ty_string.
external_define1(dll,name,arg1type,restype)- Определяет внешнюю функцию с одним параметром. Так же точно как и в функции приведенной выше, только теперь rg1type - тип первого параметра. Для него также используйте либо ty_real либо ty_string.
external_define2(dll,name,arg1type,arg2type,restype)- Определяет внешнюю функцию с двумя параметрами.
external_define3(dll,name,arg1type,arg2type,arg3type,restype)- Определяет внешнюю функцию с тремя параметрами.
external_define4(dll,name,arg1type,arg2type,arg3type,arg4type,restype)- Определяет внешнюю функцию с четырьмя параметрами.
external_define5(dll,name,restype)- Определяет внешнюю функцию с пятью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define6(dll,name,restype)- Определяет внешнюю функцию с шестью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define7(dll,name,restype)- Определяет внешнюю функцию с семью реальными параметрами. (Строки не могут содержать более 4 параметров).
external_define8(dll,name,restype)- Определяет внешнюю функцию с восьмью реальными параметрами. (Строки не могут содержать более 4 параметров).
Каждая из этих функций возвращает идентификатор внешней функции, которая должна использоваться для его вызова. Так в вышеприведенном примере, в начале игры Вы использовали бы следующий GML код:
global.mmm =
external_define2('MYOWN.DLL','MyMin',ty_real,ty_real,ty_real);
global.ddd =
external_define1('MYOWN.DLL',DoubleString,ty_string,ty_string);
Теперь всякий раз, когда Вам нужно вызывать функции, используйте пример.
aaa = external_call2(global.mmm,x,y);
sss = external_call1(global.ddd,'Hello');
Далее приводятся вызывающие функции:
external_call0(id)- Вызывает внешнюю функцию с данным идентификатором (id), который не имеет никаких параметров.
external_call1(id,arg1)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет один параметр.
external_call2(id,arg1,arg2)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет два параметра.
external_call3(id,arg1,arg2,arg3)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет три параметра.
external_call4(id,arg1,arg2,arg3,arg4)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет четыре параметра.
external_call5(id,arg1,arg2,arg3,arg4,arg5)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет пять параметров.
external_call6(id,arg1,arg2,arg3,arg4,arg5,arg6)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет шесть параметров.
external_call7(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет семь параметров.
external_call8(id,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8)- Вызывает внешнюю функцию с данным идентификатором (id), который имеет восемь параметров.
Вы возможно не знаете, как пишется функция в DLL, которая что-нибудь делает в игре. Например, Вы захотели создать DLL, которая добавляет образцы объектов в Вашу игру. Самый простой способ состоит в том, чтобы позволить своей функции в DLL возвращать строку, которая содержит часть кода GML. Эта строка, содержащая часть GML, может быть выполнена, используя функцию GML
execute_string(str) - Выполняет фрагмент кода в строке str.
Дополнительно Вы можете позволить DLL создать файл со сценарием, который может быть выполнен (эта функция также может использоваться, чтобы позже изменить поведение игры).
execute_file(fname) - Выполняет фрагмент кода в файле.
Теперь Вы можете вызывать внешнюю функцию и затем выполнить результирующую строку, например следующим образом:
ccc = external_call2(global.mmm,x,y);
execute_string(ccc);
В некоторых, редких, случаях твоей DLL может понадобиться знать о настройках основного графического окна игры. Это можно сделать с использованием следующей функции и тогда может быть использована DLL:
window_handle()- Возвращает настройки окна для основного экрана.
Обратите внимание, что DLL не может использоваться в безопасном (secure) режиме.
Использование внешних DLL - чрезвычайно мощная функция. Но пожалуйста используй их, только если Вы действительно уверены в том что делаете.

Создание и использование путей в Game Maker
Создание, использование и присвоение путей объектам, в
Game Maker.

Приветствую. В своей статье я решил описать, как создавать и использовать пути в замечательной программе Game Maker. Чтобы не отвлекать вас длинными и мутными рассказами о том, что такое пути давайте сразу перейдём к делу. Хотя не сказать что это такое всё-таки нельзя. Пути это траектория движения объекта, т.е. линия вдоль которой будет двигаться ваш объект.
И так, приступим. Добавьте в вашу игру любой спрайт, который вам нравится, или нарисуйте сами. Затем создайте объект и присвойте ему этот самый спрайт. Теперь мы подходим уже к созданию самого пути. Закройте редактор объекта, и добавьте путь. Сделать это можно двумя способами, самый простой это кликнуть по кнопке с длинной изгибающейся стрелкой на панели управления. Теперь в открывшемся редакторе вам нужно «нарисовать» путь. Делается это методом расставления кликами контрольных точек на белой области. Расставьте там 4 точки так, чтобы они образовывали квадрат. Вы увидите, что точки соединяются между собой, а последняя точка соединяется линией с первой. Всё, ваш путь готов! Если снять галочку над пунктом Closed, то последняя точка соединятся с первой, не будет, то есть путь будет разомкнутым. Сохраните путь под любым именем, и снова откройте ваш объект. Теперь нужно в событие Create объекта добавить действие Set path for the instance (установить путь для объекта). В различных версиях программы это действие находится на разных закладках, так что придётся вам самим его поискать. В открывшемся окошке действия установите скорость (не слишком большую, например 4), и что следует сделать объекту по достижении последней точки пути (список at end): stop – остановить движение, continue from start – перепрыгнуть на начальную точку и продолжить движение, continue from here – продолжить движение из этой же точки, reverse – двигаться в противоположную сторону. Создайте комнату, разместите на ней ваш объект и наслаждайтесь результатом. Если вы всё сделали правильно, то объект будет двигаться по нарисованному вами пути.

Автор © 14.07.2003 Грачёв Денис (gamemaster)

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

Создаём два спрайта частиц размеров 8 на 8 пикселей, можно взять любые кляксы для начала:):

Частица не может жить вечно, т.е. она должна плавно исчезать, поэтому редактируем спрайт: устанавливаем длину анимации (Edit Sprite->Animation->SetLength) например на 32 и включаем эффект исчезания (Edit Sprite->Animation->Disappear).

Теперь нужно создать объекты Родительское Частицы и её детей:).
Итак приступим:

Объект: родитель

ParentBum - Этот родитель будет создавать взрыв. В событие Step кидаем скрипт и пишем следушее:

if instance_number (particle1)=0 then
{move_random (16,16) repeat (100) instance_create (x, y, particle1) }

Здесь создаются 100 частиц в позиции родителя (которая определяется случайным образом) при условии что прошлый взрыв кончился (т.е. количество частиц взрыва=0).

ParentFontan - Этот родитель будет создавать фонтан. В событие Step кидаем скрипт и пишем следушее:

repeat (2) instance_create (x, y, particle2)

Здесь постоянно создаются 2 частицы в позиции родителя.

Объект: частица

Particle1 - частица взрыва. Чтобы получить эффект взрыва мы должны заставить частицы разлетаться в разные стороны с разной скоростью, для этого в событие Create кидаем кнопку с синими расходящимися стрелками (set direction and speed of motion) в поле Direction пишем "random(360)", а в поле Speed пишем "random(5)". Всё. Ах да чуть не забыл, в событие AnimationEnd кидаем кнопку Destroy the Instance:)

Particle2 - частица фонтана. Всё делаеться также как и в прошлом случае, только в поле Direction вписываем "80+random(20)", а в поле Speed "2+random(3)".

Всё осталось создать комнату, куда кидаются объекты ParentBum и ParentFontan:

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





Дата публикования: 2014-10-25; Прочитано: 377 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...