Game Maker: делаем игры своими руками Глава 13

on февраля 28, 2004 - 00:00

Глава 13: трюки и хитрости
В данной главе я расскажу вам о некоторых мелких трюках, которые помогут придать вашей игре вполне серьезный вид, да и вообще, просто так пригодятся. Не теряя времени даром, сразу приступаем к делу. Для того чтобы проиграть видеофайл из вашей игры, вставьте в соответствующее событие следующий код:

{
show_video('имя_файла.avi', true, false);
}

Для того чтобы отобразить какую-либо картинку, используйте такой код:

{
show_image('имя_файла.jpg',true, 55000);
}

В итоге файл будет показываться минуту или пока пользователь не кликнет мышкой или не нажмет какую-нибудь клавишу. Для того чтобы справка по вашей игре читалась из внешнего rtf-файла, вставьте в событие начала игры (Game Start) следующий код (файл должен находиться в одной папке с игрой):

{
load_info('имя_файла.rtf');
}

Для того чтобы сделать несколько скриншотов, выполните следующие действия: создайте объект o_screenshot, в событии Create напишите:

{
filenumber=1;
}

В событии нажатия на клавишу, при котором должен получаться скриншот, напишите:

{
screen_save(string(filenumber)+ ".bmp");
filenumber+=1;
}

Для того чтобы научить главного героя подпрыгивать, поместите следующий код в событие шага:

{
gravity_direction = 270;
if place_free(x,y+1)
gravity = 0.5;
else
gravity = 0;
if (vspeed > 12) vspeed = 12;
}

А затем в событие нажатия клавиши, предназначенной для прыжка, поместите вот этот код:

{
if (not_place_free(x,y+1)) vspeed = -10;
}

Для того чтобы сделать в игре паузу — вставьте в событие нажатия определенной клавиши код:

{
// запомнить текущие значения
__font_color = font_color;
__font_size = font_size;
__font_style = font_style;
__font_name = font_name;
__font_align = font_align;
// нарисовать текст, перерисовать экран и ждать
font_color = argument0;
font_size = 16;
font_style = fs_bold;
font_name = 'Arial';
font_align = fa_center;
draw_text(screen_width/2,100,'Пауза. Нажмите любую клавишу.');
screen_refresh();
keyboard_wait();
io_clear();
// восстановить установки
font_color = __font_color;
font_size = __font_size;
font_style = __font_style;
font_name = __font_name;
font_align = __font_align;
}

Теперь по установке игры на паузу на экране все замрет и появится надпись "Пауза. Нажмите любую клавишу". После того, как вы что-нибудь нажмете, игра восстановит свой обычный ход.
Для того чтобы создать свой курсор в игре — создайте объект o_cursor, определите для него спрайт и отключите в опциях игры пункт "show cursor". Теперь в событие шага объекта o_cursor напишите:

{
x = mouse_x;
y = mouse_y;
}

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

Глава 14: загрузка ресурсов из внешних файлов
Вполне возможно, что кто-то из вас, дорогие игроделы, при создании своей игры захочет, чтобы ресурсы игры читались из внешних файлов, как в серьезных играх. Что ж, для GM не составит большого труда помочь вам в этом деле. Вы можете загружать из внешних файлов следующие виды ресурсов: спрайты, звуки и задние фоны. В принципе, процесс загрузки везде идентичен, поэтому разберем его на примере спрайтов. Загружать ресурсы можно двумя способами: создавая новые спрайты в игре и заменяя существующие. Я рассмотрю оба способа, однако по моему скромному мнению второй способ гораздо удобнее. Почему — тут, я думаю, вы решите сами, прочтя главу до конца.
В первом случае мы будем использовать процедуру sprite_add(). Она возвращает имя создаваемого спрайта, которое вы в дальнейшем будете использовать в качестве идентификатора. Таким образом, мы пишем в событии создания комнаты:

{
s_name = sprite_add(fname,img- numb,precise,transparent,videomem,loadonuse,xorig,yorig);
}

В качестве параметров здесь следует писать: fname — путь к файлу и его имя, imgnumb — количество кадров в загружаемом спрайте\стрипе, precise — значение true\false, которое показывает, использовать ли для спрайта улучшенную проверку столкновений, transparent — значение true\false, определяет, будет ли использоваться прозрачный фон для спрайта. 
Аналогично указываются параметры loadonuse и videomem, которые отвечают за загрузку только для чтения и использование видеопамяти соответственно. Параметры xorig и yorig отвечают за координату начала спрайта, т.е. положение ориджина.
Таким образом, например, для загрузки прозрачного спрайта из не анимированного файла с именем file.bmp вам необходимо написать следующий код:

{
s_name = sprite_add('file.bmp',1,1, 1,1,0,0,0);
}

При замене спрайта мы создаем в игре "пустой" спрайт, например, с именем s_spr. Далее используем код с аналогичными параметрами, т.е.

{
sprite_replace(ind,fname,imgnumb,precise,transparent,videomem,loadonuse,xorig,yorig);
}

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

{
sprite_replace(s_name,'file.bmp',1,1,1,1,0,0,0);
}

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

Заключение
Вот и подошел к концу цикл моих статей о Game Maker'е. Надеюсь, они в той или иной мере помогли вам разобраться если не с созданием, то хотя бы с внутренним устройством игр. 
Возможно, кто-то из вас даже определился с будущей профессией. Да-да, я говорю совершенно серьезно. В любом случае, если вам понравилось создавать игры и вы хотите, чтобы это стало вашей будущей профессией — не останавливайтесь ни перед чем и не слушайте никого и тогда вы добьетесь своего.

А для тех, кто желает продолжить занятия по GameMaker'у, я приглашаю на официальный русский форум, который расположен по адресу http://www.gmakerforum.h11.ru. Возможно, мы даже сможем пообщаться.

Воронецкий "AlienRaven" Михаил

№ 50

Яндекс.Метрика