http://firepic.org/images/2012-11/20/48xdq5ys4jeh.png

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

Что мы будем делать:
Герой, который изначально не имеет никакого дополнительного оружия, может подбирать топоры и кинжалы, которые можно метать: кинжалы летят прямо, а топоры – подбрасываются вверх и, под силой тяжести, падают, летя по дуге.
Также мы дадим ограничение на количество бросков, которое можно увеличить, подбирая еще топоры или кинжалы. И еще сделаем так, что иметь можно что-то одно: либо топоры, либо кинжалы.

Приступим
Создаем героя с поведением "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

http://2.firepic.org/2/images/2012-11/17/pzxiguc2tjx4.png

В событии мы поставили условие "всегда" (чтобы текст всегда отображал нужное значение).
В действии мы сказали тексту, что нужно показывать. Если рассмотреть строчку:
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

http://firepic.org/images/2012-11/17/jzi65ja501tu.png

Событие: при соприкосновении героя с кинжалом.
Действие 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

http://3.firepic.org/3/images/2012-11/17/ucaj4nk6v4gt.png

В событии №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

http://4.firepic.org/4/images/2012-11/17/i5p0yfd9v4v5.png

Добавим объекту Axe еще одно поведение под названием Rotate (Вращение):
Выделяем Axe – Properties – Behaviors – Add – Rotate – Insert
Слегка подкорректируем значение Speed на 555.

http://3.firepic.org/3/images/2012-11/17/y0hdauftneki.png

Переходим в редактор событий (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

http://3.firepic.org/3/images/2012-11/17/npjaq9rjd8aj.png

Событие: при соприкосновении героя с топором.
Действие 1: топор уничтожается.
Действие 2: переменная arsenal меняет значение на 1 (1 – топоры, 2 – кинжалы).
Действие 3: добавляется 10 топоров.

Бросок топора будет разбит на два события. Первое – для броска влево, второе – для броска вправо.
Делаем:

События:
1. Insert event – MouseKeyboard – On key pressed – C (это клавиша броска топора) – Finish
2. Insert event – bazis – Compare angle – Equal to, Angel = 0 – Finish
3. Insert event – weapon – Compare private variable – arsenal, Equal to, Value = 1 – Finish
4. Insert event – weapon – Compare private variable – numWeapon, Greater than, Value = 0 – Finish

Действия:
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

http://2.firepic.org/2/images/2012-11/17/7w0znmfo6whl.png

Событие 1 – указываем клавишу броска
Событие 2 – получаем угол героя (в какую сторону он смотрит, 0 – это направо)
Событие 3 – проверяем, какое оружие сейчас имеет герой (1 – топоры, 2 – кинжалы)
Событие 4 – проверяем наличие "патронов"
Действие 1 – бросаем топор
Действие 2 – устанавливаем угол броска топора (285 – вверх и вправо)
Действие 3 – вычитаем одну единицу из "патронов".

Бросок вправо настроен, теперь сделаем почти тоже самое, но для левой стороны:

События:
1. Insert event – MouseKeyboard – On key pressed – C (это клавиша броска топора) – Finish
2. Insert event – bazis – Compare angle – Equal to, Angel = 180 – Finish
3. Insert event – weapon – Compare private variable – arsenal, Equal to, Value = 1 – Finish
4. Insert event – weapon – Compare private variable – numWeapon, Greater than, Value = 0 – Finish

Действия:
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

http://firepic.org/images/2012-11/17/o0zy76p3oip9.png

Событие 1 – указываем клавишу броска
Событие 2 – получаем угол героя (в какую сторону он смотрит, 180 – это налево)
Событие 3 – проверяем, какое оружие сейчас имеет герой (1 – топоры, 2 – кинжалы)
Событие 4 – проверяем наличие "патронов"
Действие 1 – бросаем топор
Действие 2 – устанавливаем угол броска топора (255 – вверх и влево)
Действие 3 – вычитаем одну единицу из "патронов".

Вот и все готово. Проверяем.
Жду ваших комментариев. С вами был Loko™, пока!