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

Движение в 4 стороны:

Давайте научи объект двигаться, вверх, вниз, влево, вправо. Для этого нам понадобятся события нажатия клавиш, и условный оператор «if..else».

Мы не будем использовать на каждую координату отдельное событие, поэтому напишем всё движение в событии “Шаг” (Step). Пишем: if(keyboard_check(vk_up)) { y -= 4; }else if(keyboard_check(vk_down)) { y += 4; }else if(keyboard_check(vk_left)) { x -= 4; }else if(keyboard_check(vk_right)) { x += 4; } Всё готово к движению, сделайте спрайт этому объекту, что бы видеть его, если ещё не сделали.

Всё что начинается с префиксом «vk_», напрямую связано с кнопками клавиатуры.

Так же, есть и такой вариант и он более удобен: if(keyboard_check(ord(“W”))) // Заметьте, нужно писать большие буквы. { y -= 4; }else if(keyboard_check(ord(“S”))) { y += 4; }else if(keyboard_check(ord(“A”))) { x -= 4; }else if(keyboard_check(ord(“D”))) { x += 4; } Я думаю, лучше всего это поместить не в событие шага, а в событие на каждую клавишу. Тогда этот код не будет постоянно проверяться, а только тогда когда произойдет нажатие, но это конечно вам решать. Я хочу сказать вам, что если эти темы показались вам сложными, то лучше вернитесь и повторите основы, и старайтесь понять всё до миллиметра. Задача 02: “Сделайте так, что бы при нажатии сразу на две клавиши WD,DS,SA,AW, объект двигался по диагонали”.

Drag&Drop или “Тяни и кидай”:

Давайте посмотрим на то, как можно сделать данную функцию. Часто начинающие игра строители, задаются вопросом, как сделать так, что бы мышка при перетягивании объекта оставалась там куда кликнул. Ведь это не возможно, потому что, спрайт становится своим центром в позицию мышки, когда используют обычный способ: x = mouse_x; y = mouse_y; Поэтому, нам нужно схитрить, немного математики нам тут не помешает.

Скажу честно, я математические темы не люблю, но без неё, даже переменных бы не было. Как-то давно я нашел пример перетаскивания объектов, и он мне очень понравился, потому что он работал как обычный способ перетаскивания окон в «Windows». Затем, я делал пример с втыкающимися стрелами, и я вспомнил этот пример с перетаскиванием, но прошло много время и я пример тот не нашел, затем я стал думать как это было сделано, искал и парился довольно таки много над этим. Потом я сел спокойно, и нарисовал на бумаге объект, написал ему координаты (примерные), и координаты как бы игрового мира, начал высчитывать и, в конце концов, я понял, как это сделать. Это очень просто, я просто в шоке был, когда понял. Значит, что нам нужно, засечь позицию мышки, на которой мы сделали клик, и вычесть с позиции объекта позицию мышки, занести результат в переменные которые не должны меняться пока действует перетаскивание объекта, затем, во время перетаскивания объекта, добавить к координатам мышки координаты результата предыдущей процедуры, и присвоить их локальной координате объекта.

Давайте напишем это, в событии создания нужны нам 4 переменные:

click = false; // Мы ещё не кликали, значит Ложь.

drag = false; // Мы ещё не перетаскиваем, значит Ложь.

tmpX = 0; // В эти переменные мы будем помещать координаты первого клика.

tmpY = 0;

Далее, событие «Шаг»:

if(drag == true) // Если мы нажали кнопку на мышке, то true.

{

if(click == false) // Если это первый раз мы нажали, то заносим координаты.

{

tmpX = x-mouse_x; // От позиции объекта мы отнимаем позицию мышки, и заливаем результат.

tmpY = y-mouse_y;

click = true; /* Мы кликнули, значит этот блок-тело пока не будет действовать, пока мы не отпустим мышку. */

}

x = mouse_x+tmpX; /* Добавляем к позиции мышки позицию первого клика, и присваиваем результат прям на координату. */

y = mouse_y+tmpY;

}

Далее, событие «Левая Кнопка Мыши», тут мы просто включаем Перетаскивание:

drag = true;

Далее, событие «Левая Кнопка Мыши отпущена»:

click = false; /* Сбрасываем первый клик, больше нет его, это для получения новых координат в следующий раз */

drag = false; /* Отключаем Перетаскивание, дабы объект не следовал больше за координатами, потому что, координаты уже не правильны, к тому же, мы отпустили кнопку и поставили объект на новое место. */

Разжуйте это, всё должно работать, двигаемся дальше.

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