Здравствуйте! В этой статье речь пойдет о создании качественного меню на Game Maker: Studio. В игре часто пренебрегают такой мелочью как меню. Здесь мы сделаем хорошее меню, в котором можно будет управлять как стрелками, так и курсором.
Для начала создадим спрайт указателя, он будет указывать, какой пункт меню мы выбрали. Назовем его, например как у меня, spr_seldraw:
Некоторые новички создают кучу спрайтов кнопок, что прибавляет вес к игре, да и вообще это непрактично. Мы же поступим куда более рациональнее, у нас все будет в коде, а вместо кнопок будет текст. Чтобы текст рисовался, добавим скрипт:
Код
var txt, col, str_space;
if !argument5 = false or 0 str_space = argument5 * argument2 else str_space = 17 * argument2;
txt = argument3; col = argument4; draw_set_font(Шрифт);
if !col = false or 0 draw_text_color(argument0,argument1+str_space,argument3,col,col,col,col,100) else draw_text(argument0,argument1+str_space,argument3);
Поясню его значение, просто некоторые могут его не понять: скрипт предназначен для рисования текста и установки особых параметров таких как цвет текста, его расположение и расстояние между строками. * draw_set_font(Шрифт) - здесь вы можете добавить в игру свой шрифт и записать сюда его имя.
Теперь создаем объект obj_drawmenu, без спрайта. Делаем событие Create, в него запишем такой код (комментарии подписал, но я поясню его общее значение и работу с ним):
Код
sel_space = 30; // пробел между пунктами
sel0 = 0; // данные перемернные описывают расположение пункта по вертикали! sel1 = sel_space; sel2 = sel_space * 2; sel3 = sel_space * 3; sel4 = sel_space * 4;
tpl = 0 // переменная отвечает за выделение пункта min_tpl = sel0; // первый пункт max_tpl = sel4; // последний пункт
sel_color = c_yellow; // цвет выделеного пункта def_color = c_white; // цвет не выделенного пункта
Этот код отвечает за пункты меню. Чтобы добавить новый пункт, надо: создать новую переменную например sel5 и задать ей значение sel_space * (номер пункта), а значении переменной max_tpl указать имя нового пункта (sel5) или последнего пункта.
С Create разобрались. Теперь переходим к событие Step. Также записываем код:
Код
if keyboard_check_pressed(vk_down) then begin if tpl = max_tpl then { tpl = min_tpl } // если дальше нет пунктов то возвращаемся на первый пункт. else // когда ниже есть пункт то { tpl += sel_space; // перемещаемся на указанный пробел между пунктами вниз. }
end; if keyboard_check_pressed(vk_up) then begin if tpl = min_tpl then { tpl = max_tpl } // если выше нет пунктов то переходим на последний пункт. else // когда выше есть пункт { tpl -= sel_space; // перемещаемся на указанный пробел между пунктами вверх. }
end;
if keyboard_check_pressed(vk_enter) then begin if tpl = sel0 { ваше действие; } if tpl = sel1 { ваше действие; } if tpl = sel2 { ваше действие; } if tpl = sel3 { ваше действие; } if tpl = sel4 { ваше действие; } end
Чтобы новый пункт работал корректно, в Step'e необходимо провести следующую процедуру: в условии нажатия клавиши "Enter" создать условие "if tpl = (имя пункта) { то что будет выполняться при выборе данного пункта }.
Но как все кнопки будут отображаться? Создаем событие Draw и записываем простой код:
Код
if tpl = sel0 { DrawText(x,y,0,'Ваш_пункт',sel_color,sel_space) } else { DrawText(x,y,0,'Ваш_пункт',def_color,sel_space) } // Если выделен пункт sel0 то рисуем его с цветом выделения, иначе рисуем его с цветом по умолчанию! if tpl = sel1 { DrawText(x,y,1,'Ваш_пункт',sel_color,sel_space) } else { DrawText(x,y,1,'Ваш_пункт',def_color,sel_space) } if tpl = sel2 { DrawText(x,y,2,'Ваш_пункт',sel_color,sel_space) } else { DrawText(x,y,2,'Ваш_пункт',def_color,sel_space) } if tpl = sel3 { DrawText(x,y,3,'Ваш_пункт',sel_color,sel_space) } else { DrawText(x,y,3,'Ваш_пункт',def_color,sel_space) } if tpl = sel4 { DrawText(x,y,4,'Ваш_пункт',sel_color,sel_space) } else { DrawText(x,y,4,'Ваш_пункт',def_color,sel_space) }
draw_sprite(spr_seldraw,0,x-20,y+tpl+6); // рисуем стрелку которая будет сбоку от выделенного текста!
И если вы добавили новый пункт, то в событии Draw необходимо сделать следующее: создать условие if tpl = (имя пункта) { DrawText(x,y,номер строки,'Текст пункта',def_color,sel_space); } else { DrawText(x,y,номер строки,'Текст пункта',def_color,sel_space) }
В идеале объект должен выглядеть примерно так:
Ставим объект в комнату, запускаем, и получаем результат:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:
Игровые объявления и предложения:
Если вас заинтересовал материал «Создание меню на Game Maker: Studio», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела.
Предлагаются такие схожие материалы:
Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.