Поиск по сайту
Авторизация
Меню сайта
Категории
Индустрия видеоигр [7] |
Разработка игр [64] |
Гейм-дизайн и графика [11] |
Сторонние движки и конструкторы [1] |
Прочее [3] |
Уроки по Game Maker [3] |
Game Maker
Если вы только-только начали изучать игрострой и еще даже не успели скачать сам
Game Maker, предлагаем вам на выбор следующие версии программы:
Game Maker 8.1
Классика. Идеально подходит для создания простых 2D игр на PC. Требует активации. | |
Game Maker for Mac
Абсолютно та же программа, но только для пользователей Mac. Требует активации. | |
Game Maker Studio
Самая новая версия с возможностью кроссплатформенной разработки. Бесплатна. |
Топ 5 игр
Агент Green | 4.2 / 5.0 |
FeDo | 4.2 / 5.0 |
To Mars: Sec... | 4.2 / 5.0 |
To Mars+MapE... | 3.9 / 5.0 |
Paintball | 3.8 / 5.0 |
Топ игр составлен путем пользовательского голосования.
Если вы не согласны с какой-либо оценкой, примите участие и поставьте свой балл игре. Ваша оценка очень важна для нас ;)
Главная » Статьи » Разработка игр |
Добавление диалогов
Здравствуйте дорогие пользователи! Мечтали когда-нибудь создать систему диалогов в игре Game Maker? Если да, то читайте дальше. Сначала нам необходимо сделать спрайт с несколькими частями (если я непонятно сказал см.скрин): Теперь создаём объект o_dialogue, и создаём событие Create, в него, прописываем код: //Это нужно только для анимации появления-исчезания диалога dy=0; // диалог изначально не раскрыт alpha=0; // абсоютно прозрачен act=0; //этой перменной будем переключать состояния //act=0 - это появление диалога //act=1 - это вывод реплик //act=2 - это исчезновение дилога //Учите теорию автоматов, господа ^_^ //Это можно назвать перемнными для текущей реплики cur_text=""; //Это текущяа реплика str=""; // Это текущий текст - часть реплики pos=0; //позиция в текущей реплике, т.к. текст мы выводим побуквенно cur_icon=-1; // текущая иконка - нет иконки ///Здесь можно задать массивом список имён говорящих, главное чтоб не путаться, для себя уставновить что-то в духе: // человек с id=0 - это "Человек 1" и у него иконка в спрайте под номером 0 name[0]="Человек 1"; name[1]="Подтверждатель"; name[2]="Лысый мужик"; //Хелперы, строка которая выводиться внизу призывая пользователя к действию. // Наши далоги можно будет пропускать и листать дальше при помощи кнопки Z str_help[0]="пропустить(Z)"; str_help[1]="продолжить(Z)"; // Ещё вот здесь я обычно выключаю главного персонажа // with o_player active=false; // у него всегда имеется перменная activate // так что я делаю так чтобы персонаж только слушал а не бродил по уровню // обратная активация персонажа делаеться в событии destroy Как видите, объяснять ничего не буду, для этого есть комментарии в коде. Далее нам нужно событие Destroy. В него пропишем такой код: //Высвобождаем память dlg_close(); //Если вы занимаетесь активацией персонажа, то самое время сделать её здесь... // with o_player active=true; //Запускаем событие для родительского объекта with par { event_user(0); } И вновь не буду ничего объяснять - для этого см.комменты в коде. На этот раз нам нужно событие Alarm0. А вот и код для него: //Здесь мы проверяем очередь if ds_queue_size(q_id)>0 then { //в очереди ещё есть реплики, поэтому вытакскиваем следующую реплику и её автора cur_icon=ds_queue_dequeue(q_id); cur_text=ds_queue_dequeue(q_content); str=""; //текщий текст сбрасываем pos=0; // позицию - тоже alarm[1]=1; //запускаем реплику } else { //реплики кончились - переключаем act=2, то есть исчезановение диалога act=2; } Комментарии в помощь. Теперь мы создаём событие Alarm1 и впишем код: //Здесь выводм посимвольно реплику if pos<string_length(cur_text) then { //конец строки не достигнут, поэтому сдвигаем позицию на 1 и к текущей строке добавляем новый символ //Здесь всё правильно. В GameMaker строки нумеруются с 1, а pos изначально равен 0. //Поэтому первая итерация сделает pos=1 и мы запишем в текщую строку первый символ. pos+=1; str+=string_char_at(cur_text,pos); alarm[1]=1; //Кстати, с условием тоже всё в порядке, когда у нас pos=string_length(cur_text), // то str уже содержит последний символ строки, т.к. добавление нового символа происходит после итерации pos } Комментарии в помощь вам. Предпоследним будет событие Step. Вводим такой код: //Это простая анимация if act==0 then { if alpha<1 then alpha+=0.2; // выводим прозрачность в 1 if dy<100 then dy+=10 else // можно считать что это высота диалогового окна, в данном случае она ббудет равна 100 { //всё раскрыли, запускаем реплики act=1; // это типа ожидание, пока act=1 будут выводиться реплики. alarm[0]=5; } } //исчезновение диалога if act==2 then { //пока прозрачность ненулевая - плавно её уменьшаем if alpha>0 then alpha-=0.1 else instance_destroy(); if dy<0 then dy-=20; } //здесь мы проматываем диалоги if keyboard_check_pressed(ord("Z")) then { //при нажатии на кнопку Z (это может быть и любая другая кнопка) if cur_text!="" then//если текущий текст вообще есть, иначе нет смысла что-то проверять { if pos<string_length(cur_text) then { // если реплика не промоталась, то искуственно её проматываем pos=string_length(cur_text);//это чтобы не было косяков. Когда сработает очередной alarm[1] то перменная уже pos=string_length(...). иначе мы рискуем получить дубли символов в реплике str=cur_text;//текущая строка - есть текущая реплика } else { //если реплика промотана, то сбрасываем текущий текст и вызываем новую реплику(если она там будет) cur_text=""; alarm[0]=1; } } } Последний раз повторюсь на всякий случай, хотите разобрать код, а не тупо его списать, читайте комментарии. И наконец событие Draw. В нём код: //рисуем!!! //Я всегда делаю такое переобзначение для координат вида - потом легче работать гораздо. var vx, vy; vx=view_xview[0]; vy=view_yview[0]; // Сперва нарисуем чёрную подложку высотой в диалогове окно draw_set_alpha(0.5*alpha); draw_set_color(c_black); draw_rectangle(vx,vy+480-dy*1.1,vx+600,vy+480,0);//<----это чисто спецэффект - тенюшка сверху дилогового окна draw_set_alpha(alpha*0.8); draw_rectangle(vx,vy+480-dy,vx+600,vy+480,0); // теперь рисуем автора реплики draw_set_alpha(alpha); draw_set_color(c_white); if cur_icon!=-1 then //если автор вообще существует { draw_sprite_ext(sprite0,cur_icon,vx+60,vy+480-dy*0.55,2,2,0,c_white,alpha); // выводим нужнйы спрайт draw_set_font(names_text_fnt); draw_set_color(c_gray); draw_text(vx+110,vy+480-dy*0.9,name[cur_icon]+":");// выводим нужное имя автора реплики } //Далее текст реплики draw_set_color(c_white); draw_set_font(main_text_fnt); draw_set_alpha(alpha); draw_text_ext(vx+110,vy+480-dy*0.65,str,20,-1);//сама текущая реплика! //Рисуем хелпер if cur_text!="" then { //тут я тоже иду на маленькую хитрость. var kk; kk=1;// изначально считаем что текст можно промотать if pos<string_length(cur_text) then { //если он уже промотан то призываем пользователя продолжить диалог... kk=0; } draw_set_font(helper_text_fnt); draw_set_color(c_gray); //я всегда такие штуки завожу массивом чтобы по условию переключать только индексы, а содержание массивов менять в событии create draw_text(vx+590-string_width(str_help[kk]),vy+480-24,str_help[kk]); } Теперь объект o_caller. Событие Create и его код: // тут всё просто dlg_create();//создаём диалог //наполняем его содержимым dlg_add_str(0,"Привет!#Это тестовая система диалогов!"); dlg_add_str(1,"Ага, Аркаша круто придумал!"); dlg_add_str(2,"Использовать очередь и событие user0"); dlg_add_str(1,"Кстати, сейчас это закончится#и игра закроется"); dlg_add_str(1,"Разве, ты с дуба рухнул."); //выводим и ждём пока рак на горе свиснет... dlg_activate(); Диалоги созданы!!! Разместите объекты в комнату и запускайте!!! С вами был Аркаша! До скорых встреч. Источник: http://igrostroystroyi.ucoz.ru/publ/sozdanie_igr/dobavlenie_dialogov/1-1-0-14 (BESTROV это я) | |
Просмотров: 4166 | Комментарии: 3 | Рейтинг: 1.8/10 |
Всего комментариев: 3 | ||||
| ||||