Всем привет. В этом уроке мы претворим в жизнь дополнительное оружие, которое придаст толику разнообразия вашей игре.
Что мы будем делать: Герой, который изначально не имеет никакого дополнительного оружия, может подбирать топоры и кинжалы, которые можно метать: кинжалы летят прямо, а топоры – подбрасываются вверх и, под силой тяжести, падают, летя по дуге. Также мы дадим ограничение на количество бросков, которое можно увеличить, подбирая еще топоры или кинжалы. И еще сделаем так, что иметь можно что-то одно: либо топоры, либо кинжалы.
Приступим Создаем героя с поведением "Platform". Назначьте ему основные команды, такие как "поворот налево", "поворот направо". Если вы не знаете, как это делается, прочитайте статью "Создание 2D платформера а-ля Ghost Quest".
Добавим поддержку клавиатуры и мыши: Insert an object – Moues & Keyboard
Создадим спрайт кинжала: Insert an object – Sprite – рисуем кинжал – сохраняем Переименуйте только что созданный спрайт в itemKnife. Это будут "патроны" для кинжала. Расставьте их по уровню в нужных местах.
Склонируем спрайт кинжала: Выделяем itemKnife – правая кнопка мыши – Copy – щелкаем правой кнопкой мыши на пустом месте на уровне – Paste Clone Переименуйте только что склонированный спрайт в Knife. Это будет кинжал, который герой сможет кидать по прямой.
Дадим ему поведение пули: Выделяем спрайт Knife – Properties – Behaviors – Add – Bullet – Insert Чтобы увеличить скорость броска, измените значение в поле Speed на 500.
Перед тем, как реализовывать непосредственно бросок кинжала, зададим отображения текущего числа "патронов".
Добавим новый объект: Insert an object – Text
Переименуйте только что созданный спрайт в weapon. Настройки размера шрифта, его цвета, жирности и курсива настраиваются в окне Properties – Properties.
Дадим тексту две новые переменные: Выделяем спрайт weapon – Private variables – Add/Edit – зеленый плюс – в поле Name пишем numWeapon – OK – зеленый плюс – в поле Name пишем arsenal – OK – Done
Переходим в редактор событии (Event Sheet Editor) Сперва зададим объекту "текст" отображение текущего числа "патронов":
Событие: Insert event – System – Always
Действие: New action – weapon – Set text – в поле Text пишем weapon.Value("numWeapon") – Finish
В событии мы поставили условие "всегда" (чтобы текст всегда отображал нужное значение). В действии мы сказали тексту, что нужно показывать. Если рассмотреть строчку: weapon.Value("numWeapon") то weapon – это объект, значение которого нужно отображать (т.к. нужное значение у нас находится в объекте weapon в виде переменной); numWeapon – это имя переменной в кавычках, содержание которой должно быть отображено.
Сделаем взятие кинжала и пополнение числа "патронов":
Событие: Insert event – bazis – On collision with another object – Pick an object – itemKnife – Finish
Действия: 1. New action – itemKnife – Destroy 2. New action – weapon – Set value – Arsenal, Value = 2 – Finish 3. New action – weapon – Add to value – numWeapon, Value = 10 – Finish
Событие: при соприкосновении героя с кинжалом. Действие 1: кинжал уничтожается. Действие 2: переменная arsenal меняет значение на 2 (1 – это будут топоры, 2 – кинжалы). Действие 3: добавляется 10 единиц кинжалов.
Реализуем бросок кинжала:
События: 1. Insert event – MouseKeyboard – On key pressed – C (это клавиша, на которую будет бросок кинжала) – Finish 2. Insert event – weapon – Compare private variable – arsenal, Equal to, Value = 2 – Finish 3. Insert event – weapon – Compare private variable – numWeapon, Greater than, Value = 0 – Finish
Действия: 1. New action – bazis (это герой, выберите своего) – Spawn another object – Pick an object – Kinfe – не забывайте поставить нужный слой в поле Layer – Finish 2. New action – weapon – Subtract from value – numWeapon, Value = 1 – Finish
В событии №1 мы установили клавишу броска. Во втором событии сделали проверку на то, какое у нас сейчас есть оружие (1 – топоры, 2 – кинжалы). В третьем событии мы проверили наличие "патронов". В действии №1 мы сделали бросок кинжала. В действии №2 мы вычли единицу из общего количества "патронов".
Можно запустить уровень и проверить на работоспособность. Сперва при нажатии на клавишу C ничего не происходит, подбираем itemKnife, текст изменяется с 0 до 10, по нажатию на клавишу C – герой бросает кинжалы.
Теперь разберемся с топорами. Для начала их нужно нарисовать. Переходим в редактор уровней (Layout Editor). Insert an object – Sprite – рисуем топор – сохраняем Переименуйте только что нарисованный спрайт в itemAxe. Это "патроны" для топора, расставьте их по уровню в нужных местах.
Сделайте клон спрайта: Выделяем itemKnife – Copy – на пустом месте правой кнопкой мыши – Paste Clone Переименуйте только что склонированный спрайт в Axe. А вот это уже наш боевой топор.
Добавим объекту Axe поведение Ball: Выделяем Axe – Properties – Behaviors – Add – Ball – Insert Измените следующие поля: Speed – 666 Max Speed – 777 Acceleration – 45 Gravity – 1444 Снимите галочки с Bounce friction, Rotate Object и Bounce off Solid
Добавим объекту Axe еще одно поведение под названием Rotate (Вращение): Выделяем Axe – Properties – Behaviors – Add – Rotate – Insert Слегка подкорректируем значение Speed на 555.
Переходим в редактор событий (Event Sheet Editor) Первым делом сделаем подбор топора:
Событие: Insert event – bazis – On collision with another object – Pick an object – itemAxe - Finish
Действия: 1. New action – itemAxe – Destroy 2. New action – weapon – Set value – Arsenal, Value = 1 – Finish 3. New action – weapon – Add to value – numWeapon, Value = 10 – Finish
Событие: при соприкосновении героя с топором. Действие 1: топор уничтожается. Действие 2: переменная arsenal меняет значение на 1 (1 – топоры, 2 – кинжалы). Действие 3: добавляется 10 топоров.
Бросок топора будет разбит на два события. Первое – для броска влево, второе – для броска вправо. Делаем:
Действия: 1. New action – bazis – Spawn another object – Pick an object – Axe – не забываем указать нужный слой в поле Layer – Finish 2. New action – Axe – переходим во вкладку Ball – Set angle of motion – указываем значение 285 – Finish 3. New action – weapon – Subtract from value – numWeapon, Value = 1 – Finish
Событие 1 – указываем клавишу броска Событие 2 – получаем угол героя (в какую сторону он смотрит, 0 – это направо) Событие 3 – проверяем, какое оружие сейчас имеет герой (1 – топоры, 2 – кинжалы) Событие 4 – проверяем наличие "патронов" Действие 1 – бросаем топор Действие 2 – устанавливаем угол броска топора (285 – вверх и вправо) Действие 3 – вычитаем одну единицу из "патронов".
Бросок вправо настроен, теперь сделаем почти тоже самое, но для левой стороны:
Действия: 1. New action – bazis – Spawn another object – Pick an object – Axe – не забываем указать нужный слой в поле Layer – Finish 2. New action – Axe – переходим во вкладку Ball – Set angle of motion – указываем значение 255 – Finish 3. New action – weapon – Subtract from value – numWeapon, Value = 1 – Finish
Событие 1 – указываем клавишу броска Событие 2 – получаем угол героя (в какую сторону он смотрит, 180 – это налево) Событие 3 – проверяем, какое оружие сейчас имеет герой (1 – топоры, 2 – кинжалы) Событие 4 – проверяем наличие "патронов" Действие 1 – бросаем топор Действие 2 – устанавливаем угол броска топора (255 – вверх и влево) Действие 3 – вычитаем одну единицу из "патронов".
Вот и все готово. Проверяем. Жду ваших комментариев. С вами был Loko™, пока!
Сообщение отредактировал: Loko™ - Вторник, 20.11.2012, 13:23