Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GM - Делюсь опытом (Часть первая).docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
344.82 Кб
Скачать

Работа с текстом:

Давайте, раз уж мы начали с текста, то немного поработаем с ним.

Выведем текст над объектом, например, это Имя.

Но сначала, создайте новый объект и сделайте ему любой спрайт.

В событии создания этого объекта пишем:

playerName = Player1”;

В событии рисования:

draw_text(x-sprite_xoffset,y-sprite_yoffset-16,playerName); // Объясню ниже

draw_sprite(sprite_index,-1,x,y); // Рисуем спрайт объекта в позиции x,y, со всеми кадрами -1.

Первое что я хочу, что бы вы обратили особое внимание на запись: sprite_index

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

draw_text(x-sprite_xoffset,y-sprite_yoffset-16,playerName);

Где «sprite_xoffset» и «sprite_yoffset» хранят в себе как бы границу спрайта, например, если это 32 пиксела по координате x, то мы отнимаем эти 32 от координаты x нашего объекта.

Но с координатой «y» происходит немного другая история, мы отнимаем ещё и -16, почему так?

Потому что текст, который мы собираемся написать, имеет высоту примерно в 16 пикселов, поэтому мы и их должны учитывать.

Надеюсь, вы понимаете, что нужно поставить этот объект в игровую комнату.

При движении объекта, текст будет всегда находиться над ним.

Попробуйте, добавьте код в событие создания: hspeed = 1; или vspeed = 1;

Так же, хочу сказать вам, не бойтесь экспериментировать! Это очень помогает понять детали.

А давайте теперь добавим к имени вывод координат на экран, изменим строчку:

draw_text(x-sprite_xoffset,y-sprite_yoffset-16,playerName+” X: ”+string(x)+” Y: ”+string(y));

Не забыли? Почему мы переводим x и y, в строку? Если забыли - вернитесь и повторите тему.

Вернемся к теме.

Что я хочу вам показать данной строчкой?

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

«Хочу сказать, что мы больше не будем называть Игровой уровень – Комнатой, мы будет называть это игровым полем».

И так, продолжим:

Давайте теперь, совместим цикл «for», «Массив» и функцию рисования текста «draw_text_color».

В событие создания объявим массив и заполним его значением, пусть это будут имена:

nameUser[0] = “Victor”;

nameUser[1] = “Ivan”;

nameUser[2] = “Masha”;

nameUser[3] = “Dasha”;

nameUser[4] = “Petro”;

В событие рисования:

for(n = 0; n <= 4; n += 1)

{

draw_text_color(x,y+16*n,nameUser[n],c_red,c_red,c_blue,c_red,1);

}

В итоге мы получим спускающийся цветной список имен.

Работа с Числами (Уровень игрока):

За основу я возьму часто задаваемый вопрос, как сделать Уровень игрока, и как сделать остальные показатели, что бы они увеличивались на какую-то долю после повышения уровня.

И так, нам нужны переменные Уровня, Здоровья, Атака, Защита (Броня), но нам нужна и проверка на максимально возможное значение.

Создайте новый проект, создайте объект назовите его obj_Controller, отметьте галочку «Постоянный» (Persistent), и поместите его в комнату, в левый верхний угол.

В событии создания:

globalvar glob_maxLevel, glob_maxHP, glob_maxAtt, glob_maxDef;

glob_maxLevel = 60;

glob_maxHP = 1000;

glob_maxAtt = 120;

glob_maxDef = 200;

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

Теперь, создайте ещё один объект назовите его obj_Player, и поместите его в комнату, создайте ему Спрайт (любой).

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

level = 1;

lvlHP = 245;

lvlAttack = 15;

lvlDefense = 20;

if(level > glob_maxLevel)

{

level = glob_maxLevel;

}

if(lvlHP > glob_maxHP)

{

lvlHP = glob_maxHP;

}

if(lvlAttack > glob_maxAtt)

{

lvlAttack = glob_maxAtt;

}

if(lvlDefense > glob_maxDef)

{

lvlDefense = glob_maxDef;

}

Давайте выведем всё на экран, событие Draw (Рисование):

draw_text(x-16,y-100,”LVL: ”+string(level)+”#HP: ”+string(lvlHP)+”#Att: ”+string(lvlAttack)+”#Def: ”+string(lvlDefense));

draw_sprite(sprite_index,-1,x,y);

Далее, добавьте ещё одно событие, Другие->Событие, определяемое пользователем (Other->User Defined) добавьте нулевой, и пишем в нем:

if(level == 2)

{

lvlHP += 15;

lvlAttack += 2;

lvlDefense += 3;

}else if(level == 3)

{

lvlHP += 15;

lvlAttack += 2;

lvlDefense += 3;

}else if(level == 4)

{

lvlHP += 15;

lvlAttack += 2;

lvlDefense += 3;

}else if(level == 5)

{

lvlHP += 15;

lvlAttack += 2;

lvlDefense += 3;

}else if(level == 6)

{

lvlHP += 15;

lvlAttack += 2;

lvlDefense += 3;

}

Сделайте ещё один объект и назовите его obj_Enem, и сделайте ему Спрайт (любой), затем поместите несколько таких объектов в комнату.

Создайте ему событие создания, и пишем:

hp = 100;

Добавьте ему событие Мышь -> Левая отпущена (Mouse->Left Released), и пишем.

hp -= 25+irandom(obj_Player.lvlAttack); // От 25 до 40, при первом Уровне игрока.

if(hp < 1)

{

with(obj_Player)

{

level += 1;

event_user(0);

}

instance_destroy();

}

Теперь можно запустить и покликать на наших врагов, и посмотреть на результат.

Ну а сейчас я объясню немного:

В начале, мы создаем все нужные нам переменные, затем проверяем их на превышение максимального количества. Затем, мы выводим на Экран наши данные.

Затем, мы создали проверку, в зависимости от уровня мы повышаем характеристики игрока, но тут есть одно но, мы не проверяем это постоянно, мы проверяем это при каждой смерти врага, за счет вызова event_user(0). Я думаю это хорошо.

Функция irandom аналогична функции random, разница лишь в том, что irandom округляет число до целого.

Разберитесь с этим полностью до миллиметра, возможно, это не лучший вариант, но если вы поймете, как сделать лучше и сделаете, то это лишь огромный плюс к вашему учению и не только.

Задача 01:

«Сделайте игроку «Опыт», что бы в зависимости от его количества менялся Уровень.»

двигаемся дальше.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]