Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Выстрелы на событиях

Выстрелы на событиях 4 года 11 мес. назад #91642

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1538
  • Спасибо получено: 2387
  • 3 место ГотвУчительПобедитель конкурсаКомпозитор1 место в ГотвОратор2 место Организатор конкурсов
Наверняка многие хотят чтоб герой умел "стрелять" прямо на карте, чтобы сделать свои "танчики", или же добавить какой-никакой ЭКШОН. Можно конечно скачать скрипты на АБС боёвки, но напрмиер на том же МВ полноценной законченной АБС нету, поэтому этот урок о том,как сделать элемент АБС на ивентах :mad:

УПРАВЛЕНИЕ

перво-наперво следует привязать кнопку к выстрелу. Для этого создаем общее событие.
1)Параллельное. Условие включения - переключатель который для удобства назовем "управление"
2)Ветвление условий -> скрипт Input.isTriggered('ok')
То есть выстрел будет на кнопку "ЭНТЕР"
Можно конечно сделать "Ветвление условий -> если кнопка "ок" нажата, но в таком случае, при нажатии выстрел будет срабатывать несколько раз пока кнопку не отпустишь. Пауза выручает в этом случае,но всё же будет немного коряво
3) Внутри ветвления - второе общее событие - назовем его "Выстрел"

Таким же способом делаем "смену оружия". Привяжем ее на кнопку "CANCEL"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Создаем на карте событие,которое включает переключатель
На скрине он отмечен синим прямоугонльиком.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Заполняем это событие следующим образом

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


ВЫСТРЕЛ

Создаем общее событие "выстрел",на которое ссылалось предыдущее общее событие.
Оно не имеет переключателя и не параллельно.

Чтобы герой не стрелял не имея в руках пистолета, создаем оружие пистолет ли любо е другое по вашему желанию и добавляем условие
1) Ветвление условий -> Если герой экипирован "пистолетом".
2) Переключатель,который назовем для удобства "пистолет" - > включить
3) Переключатели остальных оружий выключаем
4) добавляем активирование 6ого общего события,которое я назвал "выстрел",но маленькими буквами:\ исправлять скрины лень,надеюсь не запутается никто(
Таким же способом доабвляем и другие оружия,например дробовик
Только переключатели поменяется местами а общее событие активируется другое,напрмиер "выстрел из дробовика"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


ВРАГ

Создаем врага,в которого мы и будем стрелять
1) создаем НПС,с маршрутом или без. Главное запоминаем его ID. В нашем случае у него ID=2
Здесь он в зеленом прямоугонльике

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


2) В первом событии (НЕ общем) добвляем переменную "здоровье врага". и пусть она будет равна 10.

3) В 2-ом событии,то есть в событии нпс Врага, создаем вторую страницу. Оно активируется переключателем "враг мертв".
Графику врага заменяем на его "останки". Либо делаем ее пустой если хотите чтобы он "исчез" после смерти

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]



ПАТРОНЫ

Герой должен стрелять ПАТРОНАМи/стрелами/огнем. Поэтому надо создать события спрайтов патронов.
В зависимости от того,СКОЛЬКО патронов может быть на экране одновременно,создаем столько и патронов.
Мы сделаем вариант для четырех патронов. На скрине они обведены в красный прямоугольник
Очень важно запомнить ID этих патронов. В нашем случае это 3-6.
На всех последующих картах патроны должны быть с такими же ID

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


1) Создаем событие "патрон". Первая страница пустая.
2) Вторая страница запускается при выстреле из пистолета.
Переключатели для активации
"патрон 1" и "пистолет"
Триггер - параллельный
Скорость - лучше двухкратную

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


3) Указываем маршрут. В зависимости от того, на сколько клеток стреляет оружие,столько раз вставляем команду "вперед".
В конце обязательно делаем выключение переключателя,которым активировалось событие,то есть выключаем "патрон 1"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


4) настраиваем столконвение патрона с тайлами. Для этого сначала присваиваем тайлам метки местности. наприме пусть стены будут с метками "5"
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


5) приравниваем переменную "патрон 1 х" к координате Х события "патрон 1"
$gameMap.event(this._eventId).x
Точно также еще одна переменная к к координате Y
$gameMap.event(this._eventId).y

6) Получить данные о местности. Создаем переменную "данные", координатами указываем вышеприсвоенные переменные

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


7) Создаем ветвлениие-> скрипт $gameVariables.value(43)==4||$gameVariables.value(43)==5||$gameVariables.value(43)==6
Где $gameVariables.value(43) - переменная 43, а равные ей числа - метки территорий

Переключатетль ПАТРОН 1 выключить

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


8) доабвляем столкновение с врагом

Ветвление улсовий -> скрипт $gameMap.event(2).x == $gameMap.event(this._eventId).x && $gameMap.event(2).y == $gameMap.event(this._eventId).y

Где вместо двойки пишем ID врага.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


9) показываем анимацию при попадании во врага. Например брызги крови.
10) Уменьшаем кол-во здоровья врага на урон от патрона.
У пистолета пусть будет 2. У дробовика должно быть больше. У рогатки не больше одного :mad:

11) если переменная здоровье врага меньше нуля,то враг умирает,поэтому включаем переключатель "враг мертв".

12) Ну и выключаем переключатель "патрон 1"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


То же самое сделать с другими патронами.
Не забываем менять там переключатели. Запутаться очень легко

ВЫЛЕТ ПАТРОНОВ

Помните то общее 6ое событие которое названо маленькими буквами "выстрел"? Редактируем его

1) Никакой пареллельности,никаких переключателей.
2) создаем ветвление условий "если переключатель патрон 1 включен".
не забываем включить вторую ветвь
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


3) Внутри этого ветвления создаем условие "если переключатель патрон 2 включен".
4) Далее столько ветвлений,сколько патронов у тебя создано. В нашем случае последнее ветвление будет "если переключатель патрон 4 включен".

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


5) Внутри каждого ветвления после "ИЛИ" создаем сначала воспроизведение звука выстрела
6) после каждого звука вставляем ветвления "если игрок повернут вниз/вверх/влево/вправо". Это для того,чтоб патрон стрелял туда,куда повернут персонаж
7) внутри каждого ветвления пишем маршрут события "патрон" такой-то".
Очень легко запутаться, поэтому проверяем чтоб в каждом ветвлении,созданных на шагах 2-4, в маршруте были именно те патроны,которые указаны в ветлвении
- поворот этого патрона вверх/вниз/влево/вправо
- скрипт $gameMap.event(6).setPosition($gamePlayer.x,$gamePlayer.y)
Это телепорт событий "патронов" в координаты игрока.
Вместо 6 пишем ID нужного патрона.
- Включить переключатели соответствующих патронов.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


ЕЩЕ РАЗ: в КАЖДОМ ветвлении созданных на шагах 2-4 ID патрона и переключатели меняются. Важно не запутаться

АЛГОРИТМ ДЛЯ ПОЯСНЕНИЯ.

Вот в общем, и всё. Теперь при нажатии на кнопку герой будет стрелять.
Вот алгоритм выстрела, длля того чтоб лучше понять принцип действия

1) При нажатии на кнопку ЭНТЕР это отслеживается в общем событии "управление"
2) оно ссылается на общее событие "ВЫСТРЕЛ", которое отслежвиает экипирован ли пистолет
3) Если экипирован то происходит отсылка к общему событию "выстрел".
4) Проверяется включения переключателей,то есть летит ли какой-либо патрон во время нажатия.
При первом нажатии кнопка эти переключатели выключены поэтому выполняется первое условие,активирующее событие "патрон"
Если после этого сразу нажать еще раз ЭНТЕР,то общеее событие "выстрел" отследит что первый патрон еще летит поэтмоу активирует второй патрон. И т.д.
При 5-ом нажатии на кнопку ничего не произойдет так как все патроны "в полете". Но оно активируется когда какой-либо из патронов попадет в препятствие или врага и переключатель выключится.
5) Что делает событие ПАТРОН? Когда активируется то проверяется из какого оружия стреляет. Это нужно для того чтоб задать разному оружию разный урон и дальность выстрела. Дальность выстрела регулируется в маршруте события кол-вом команд "вперед".
Урон - вычитанием числа из здоровья врага.
6) При "долета" патрона весь путь пеереключатель выключается. Если патрон попадает в тайл с меткой "5," или любой другой по вашему желанию то также отключается. Ну и во время попадания врага,или в любое другое событие которое вы натсроили.


О том,как привязать смену оружия на соответсвующую кнопку, о том как сделать ограниченное число патронов, как сделать перезарядку, "область урона", отображение патронов на дисплее - в следующий раз

ДЕМКА:

Не забываем экипировать пистолет перед тем как стрелять

тыктыктык
Последнее редактирование: 4 года 11 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: I_LORD, DK, Демий, Jas6666, TheMaximGames, AndreyE, VarVarKa, Elite Agent

Выстрелы на событиях 4 года 11 мес. назад #91643

  • Luar_Zero
  • Luar_Zero аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 468
  • Спасибо получено: 986
  • Победитель конкурсаУчитель1 место в Готв3 место2 место 2 место ГотвЗа 2 место на конкурсе маппингаХудожник
этот урок о том,как сделать элемент АБС на ивентах
5) приравниваем переменную "патрон 1 х" к координате Х события "патрон 1"
$gameMap.event(this._eventId).x
Точно также еще одна переменная к к координате Y
$gameMap.event(this._eventId).y
7) Создаем ветвлениие-> скрипт $gameVariables.value(43)==4||$gameVariables.value(43)==5||$gameVariables.value(43)==6
Где $gameVariables.value(43) - переменная 43, а равные ей числа - метки территорий
8) доабвляем столкновение с врагом

Ветвление улсовий -> скрипт $gameMap.event(2).x == $gameMap.event(this._eventId).x && $gameMap.event(2).y == $gameMap.event(this._eventId).y
- поворот этого патрона вверх/вниз/влево/вправо
- скрипт $gameMap.event(6).setPosition($gamePlayer.x,$gamePlayer.y)


Угу. На одних ивентах, совсем без скриптов. Не засчитано.
Администратор запретил публиковать записи гостям.

Выстрелы на событиях 4 года 11 мес. назад #91648

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1538
  • Спасибо получено: 2387
  • 3 место ГотвУчительПобедитель конкурсаКомпозитор1 место в ГотвОратор2 место Организатор конкурсов
Luar_Zero пишет:
этот урок о том,как сделать элемент АБС на ивентах
5) приравниваем переменную "патрон 1 х" к координате Х события "патрон 1"
$gameMap.event(this._eventId).x
Точно также еще одна переменная к к координате Y
$gameMap.event(this._eventId).y
7) Создаем ветвлениие-> скрипт $gameVariables.value(43)==4||$gameVariables.value(43)==5||$gameVariables.value(43)==6
Где $gameVariables.value(43) - переменная 43, а равные ей числа - метки территорий
8) доабвляем столкновение с врагом

Ветвление улсовий -> скрипт $gameMap.event(2).x == $gameMap.event(this._eventId).x && $gameMap.event(2).y == $gameMap.event(this._eventId).y
- поворот этого патрона вверх/вниз/влево/вправо
- скрипт $gameMap.event(6).setPosition($gamePlayer.x,$gamePlayer.y)


Угу. На одних ивентах, совсем без скриптов. Не засчитано.

А теперь скажи где я писал что "на ОДНИХ ивентах", "БЕЗ ЕДИНОГО СКРИПТА" и прочее подобное? *facepalm*

Здесь всё сделано на ивентах. Скриптовые команды вставлены для того,чтоб не лепить ветвления в ветвлениях, что внесет путанницу.

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

- Меня не устраивает ни одна АБС на эйсе.
- Я делаю игру на МВ,а на нем вообще нет АБС кроме одной недоделки.
- Я не программист и не смогу написать АБС сам, а взяться на нее просто так никто не согласится. Опять же тратить время на изучение языков мне не хочется,я и так графу сам всю рисую.

Поэтому я и делаю АБС тем способом которым умею,ну и решил этим поделиться, вдруг кому-нибудь подобные наработки пригодятся.

Да и скриптовые команды я объяснил более менее,поэтому каких сложностей они вызывать н едолжны. Опять же если кто-то их не понял всегда можно спросить
Последнее редактирование: 4 года 11 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK, Демий

Выстрелы на событиях 4 года 11 мес. назад #91650

  • Luar_Zero
  • Luar_Zero аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 468
  • Спасибо получено: 986
  • Победитель конкурсаУчитель1 место в Готв3 место2 место 2 место ГотвЗа 2 место на конкурсе маппингаХудожник
А теперь скажи где я писал что "на ОДНИХ ивентах", "БЕЗ ЕДИНОГО СКРИПТА" и прочее подобное?

Я понимаю так, если написано, что на ивентах, значит на ивентах. Если написано в факультете событий, значит речь будет о том, как что-то сделать с помощью этих событий. Хотя, конечно, ты можешь мне указать на то, что название раздела "Факультет событий", а не "Факультет ОДНИХ событий".
Скриптовые команды вставлены для того,чтоб не лепить ветвления в ветвлениях, что внесет путанницу

А вот для меня, как для сторонника работы только с событиями эти строчки вносят основную путаницу, потому что я понимаю все, кроме них. Да, там объясняется, для чего они нужны. Но я не понимаю, их можно заменить обычными ивентами или нет? Если да, то какого черта?

Я делал похожую систему и она работала через задницу. Я хочу понять, где именно я ошибся. И пока не понимаю, потому что половина команд заменены строчками кода, принцип работы которого мне неизвестен.
Толку от таких уроков, когда читателю предлагается половину просто взять и скопировать, не разбираясь, как оно там действует.
Поэтому я и делаю АБС тем способом которым умею,ну и решил этим поделиться, вдруг кому-нибудь подобные наработки пригодятся

Так бы и сказал, а то "урок"...
Администратор запретил публиковать записи гостям.

Выстрелы на событиях 4 года 11 мес. назад #91651

  • Kouta555
  • Kouta555 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 548
  • Спасибо получено: 742
  • ВетеранРазработчикПроект месяца 2 местоОратор2 место Победитель конкурсаПроект месяца 3 местоПроект месяца 1 место
Хорошая штука, на асе не пробовал так же делать?
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: yuryol

Выстрелы на событиях 4 года 11 мес. назад #91652

  • Демий
  • Демий аватар
  • Вне сайта
  • Модератор
  • Здесь могла быть ваша реклама
  • Сообщений: 1505
  • Спасибо получено: 1395
  • РазработчикПисатель 2 место3 место ГотвТестер1 место в ГотвВетеранУчитель3 место
Молодец, хоршо постарался, конечно, но у меня есть вопросы. Зачем столько переключателей и переменных? Сам же говоришь, что можно запутаться... В придачу, что если враг на карте не один? Ладно пять, а тридцать? Каждый раз копировать условия? Муторно и пусто...

Например, что бы получить "метку территории", можно использовать вот такую простую строку:
$gameMap.terrainTag(x, y);
Последнее редактирование: 4 года 11 мес. назад от Демий.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Jas6666, yuryol

Выстрелы на событиях 4 года 11 мес. назад #91657

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1538
  • Спасибо получено: 2387
  • 3 место ГотвУчительПобедитель конкурсаКомпозитор1 место в ГотвОратор2 место Организатор конкурсов
Luar_Zero пишет:
Если написано в факультете событий, значит речь будет о том, как что-то сделать с помощью этих событий.

А теперь посмотри какие разделы есть в академии и поймешь что самый подходящий раздел именно здесь.
И еще посмотри остальные уроки в этом разделе, в одном из которых вообще плагин использовался.
В любом случае это ивентовая механика, и то что используются СТАНДАРТНЫЕ командные скрипты этого не отменяет. Потому что всех их можно заменить стандартными ивентовыми командами,просто всё это делается для упрощения, чтобы не было кучи ненужных действий. Это в каком-нибудь конкурсе мог бы брызгать слюной доказывая что нельзя использовать скрипты в ветлениях,а в уроках твои претензии вообще не в тему.

$gameMap.event(n).x
$gameMap.event(n).y
Это координаты Х и У событий, где n - ID события. Вместо номера ID события можно написать "this._eventId",что означает "ЭТОГО события"
Заменяется следующими стандартными командами:
-присвоение переменной координаты игровых данных "событие врага - координата Х"
-присвоение переменной координаты игровых данных "событие врага - координата Y"
- присвоение переменной координаты игровых данных "событие патрон - координата X"
- присвоение переменной координаты игровых данных "событие патрон - координата Y"
- ветвление условий -> если переменная "событие врага - координата Х" равна "событие патрон - координата X"
- внутри него ветвление условий - если переменная "событие врага - координата Y" равна "событие патрон - координата Y"

То есть вместо ОДНОГО условия мы бы использовали ШЕСТЬ действий. При этом эти действия надо скопировать для остальных патронов,и везде поменять события патронов.
По мне так это гораздо запутаннее и муторней чем выучить одну строчку скриптовой команды.

$gameVariables.value(n)
это переменная,где n - ID переменной. Заменяется:
- вевтление условий -> если переменная "данные" равна 4
- если есть другой тег то вевтление условий -> если переменная "данные" равна 5
- вевтление условий -> если переменная "данные" равна 6
То есть получится опять плодить ветвления,при этом внутри них будет одно и то же.

$gameMap.event(n).setPosition(x,y)[/quote]
Это телепорт, где n ID события, х и у - координаты куда оно переместится.
Поставив вместо координат строчки $gamePlayer.x и $gamePlayer.y мы телепортируем события в координаты игрока.
Заменяется:
-присвоение переменной координаты игровых данных "игрок - координата Х"
-присвоение переменной координаты игровых данных "игрок- координата Y"
-"установить расположения события" - > переменные "игрок - координата Х" и "игрок- координата Y"

То есть ВСЕ скриптовые команды можно заменить ивентовыми. Но цель урока не сделать ВСЁ на ивентах,а сделать более менее оптимизировано и удобно.
Так бы и сказал, а то "урок"...

Хм,и чем же это не урок? Тут не просто демка,тут куча текста с объяснениями.
Kouta555 пишет:
Хорошая штука, на асе не пробовал так же делать?
yadi.sk/d/AkvEbRS1dDBCQ

Года полтора назад размещал это для эйса в свое дневничке

yadi.sk/d/AkvEbRS1dDBCQ

Там правда вроде второй игрок еще добавлен, а вот проверки экипировки нет, и вроде столкновения со стенами тоже нет.
Где-то года полтора назад у меня была демка для эйса где всё это добавлено,но я потерял ее,но если друг найду то выложу
Демий пишет:
Молодец, хоршо постарался, конечно, но у меня есть вопросы. Зачем столько переключателей и переменных? Сам же говоришь, что можно запутаться... В придачу, что если враг на карте не один? Ладно пять, а тридцать? Каждый раз копировать условия? Муторно и пусто...

Например, что бы получить "метку территории", можно использовать вот такую простую строку:
$gameMap.terrainTag(x, y);

Про метку территории не знал,я ж новичок всё-таки :blush: Спасибо,буду использовать,что-то я не догадался даже спросить/погуглить на счет этого.
На счет того что придется копипастить ветвления - это да,но что уж поделать.
Можно наверное сделать одно ветвление - "если событие сталкивается с каким-либо непроходимым событием или тайлом",то взывается общее событие в котором все ветвления прописаны, но при одновременном обращении к этому событию нескольких патронов боюсь что будут баги.
Последнее редактирование: 4 года 11 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.

Выстрелы на событиях 4 года 11 мес. назад #91675

  • yuryol
  • yuryol аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1538
  • Спасибо получено: 2387
  • 3 место ГотвУчительПобедитель конкурсаКомпозитор1 место в ГотвОратор2 место Организатор конкурсов
Продолжаем извращаться с АБС :mad:

ИНТЕРФЕЙС

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

1 ШАГ
Для отображения интерфейса нам во-первых надо его нарисовать. Что-то типа такого.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


1) "фон" на которой будут нужные иконки,цифры. В демке это "НАЧ" - т.е. начальный пустой интерфейс. На нём слева большое поле для отображения там оружия которое у нас экипировано (красная стрелка на рисунке указывает на это окошко). Правее него два нбеольших окошка,в которых у нас будет показано то оружие,которое у нас есть в инвентаре (зеленая стрелка).
2) иконки оружия. Требуется большие иконки для экипированного оружия ("ГЛ ИК ДРОБ" - главная иконка дробовик" и "ГЛ ИК ПИСТ" - главная иконка пистолет", отмеченные желтой стрелкой) и небольшие иконки для отображения в окошках инвентаря - "пистолет" и "дроб"(фиолетовая стрелка)
3) цифры,показывающее кол-во патронов. Пока сделаем чтоб у нас цифры были только однозначные. (П 0 - П 9) - синий квадратик
4) цифры,показывающие кол-во обойм(магазинов) (ОБ 0 - ОБ 9) - черный квадратик

2 ШАГ


1) Создаем общее событие "интерфейс". Для удобства сделаем его параллельным и запускаяющимся от переключателя "интерфейс".
2) Создаем ветвление "интерфейс включен",чтобы при привязке выключении переключателя "интерфейс" к кнопке все картинки удалились с экрана
3) Внутри ветвления - "показать изборажение". и,собственно говоря,показываем изображение "нач"
4) Далее создаем ветвления следующие друг за другом проверяющие какое оружие в экипировке. Внутри них показывает изображение. ID (номер) изображений должно быть у них ОДИНАКОВОЕ и при этом БОЛЬШЕ ID изображения "нач", дабы иконки изображались сверху окошка а не под ним.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


5) Создаем для удобства оружие "пусто", которое означает то,что в руках героя ничего нет. Создаем ветвление проверяющее экипировку оружием "пусто",а внутри него - удалить изображение с ID которое было у изображений в предыдущем пункте

6) делаем подобное для отображения иконок в окошках,проверяющих какое оружие есть в инвентаре. Т.е. когда мы возьмем оружие из сундука то оно сразу же отобразиться в этих окошках. ID изображений должно быть больше ID изображений "нач" и не совпадать с ID изображений,рассметоренных в предыдущих двух пунктах

Получится что-то типа этого.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


3 ШАГ

1) создаем ветвление "если герой экипирован "пусто". В этом случае мы удаляем изображения которые у нас будут обозначать обоймы.
2) ИНАЧЕ - ветвления проверяющие чему равны переменные "обойма" и "патроны" и отображение кратинки с соответствующим номером.
ID картинок в ветвлениях с "патронами" должны быть одинаковыми и не совпадать с ID кратинок с иконками и окошками
То же самое с "обоймами"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


4 ШАГ

Во втором пункте 2-ого шага в ветвлении "или" УДАЛЯЕМ ВСЕ картинки,использованные выше

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


ПЕРЕЗАРЯДКА

1 ШАГ
1) Во-первых,вернемся в общему событию "управление."
Стрелять на Энтер а менять оружие на "отмена "(ESC) очень неудобно.
Меняем кнопки на Q и W, т.е. в скрипте пишем Input.isTriggered('pagedown') и Input.isTriggered('pageup')
2) Внутри них ссылаемся на общие события "выстрел" и "смена оружия"
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


3) смену оружия пока не трогаем,а во выстрел изменим.

2 ШАГ

Когда оружие надо перезарядить? Когда патронов нет,т.е. они равны нулю, а обойм(магазинов) НЕ ноль
1) создаем ветвление "переменная "патроны" = 0",а внутри него - ветвление "если переменная обоймы = 0"
2) если патронов НОЛЬ а обойм ИНАЧЕ чем НОЛЬ - происходит перезарядка.
3) если патронов НОЛЬ и обойм НОЛЬ,то воспроизводим звук разряженного оружия, напрмиер звук "key" подходит для этого
4) если патронов НЕ НОЛЬ происходит выстрел,а потому запускаем общее событие "выстрел".
5) раскидываем всё это для разных видов оружия. То есть ссылаемся на общее событие "выстрел пистолета и "перезарядка пистолета" вместо просто "перезарядка" и "выстрел"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


3 ШАГ

Собственно,сама перезарядка

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


1) делаем два звуковых сигнала. Один для начала перезарядки а второй - для окончания перезарядки. Между ними вставляем команду "ждать",равную стольким кол-во кадров,сколько вы хотите чтобы длилась перезарядка. Очевидно,что для пистолета она будет намного меньше чем для дробовика, а для базуки еще намного больше.

2) создаем переменную "патроны пистолета" и приравниваем ее к такому числу,сколько вы хотите патронов в обойме. Пусть будет 8. Будем считать что это старый несовременный пистолет.

3) приравниваем переменную "патроны",которая у нас будет выводится на экране интерфейса, к переменной "патроны пистолета"

4) ОТНИМАЕМ обойму, так как при перезарядки кол-во магазинов уменьашется на один

5) Ну и приравниваем кол-во обойм к числу обойм пистолета в интветаре

То же самое делаем для других оружий,меняя кол-во патронов в магазине, время перезарядки, обоймы в инвентаре и переменные "патроны пистолет" на "патроны нужного оружия"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


ВЫСТРЕЛЫ

Помните общее событие "выстрелы" из прошлого урока? Теперь его надо чуть подправить для того,чтобы учитывалось кол-во патронов

Для этого перед каждым звуком в ветвлениях для КАЖДОГО патрона доабвляем команды "переменная"патроны такого-то оружия-1", а затем приравниваем переменную "патроны" к этой переменной.

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Ну и не забываем при доабвлении оружия добавлять страницы в событиях "патроны" на карте.
Также там меняем урон от врагов вычитай из переменной "враг здоровье" нужное число. У меня эти числа одинаковые,но заменив двойка на 4 у дробовика он станет наносить больше урона.
Также в маршруте события регулируем дальность выстрела кол-вом команд "вперед"

ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


СМЕНА ОРУЖИЯ

Сделаем следующий алгоритм:
- если у героя нет НИЧЕГО в руках и НИЧЕГО в инвентаре то при кнопку на смену оружия НИЧЕГО не происходит
- если у героя нет НИЧЕГО в руках и есть пистолет в инвентаре то при кнопку на смену оружия экипируется пистолет
- если у героя есть ПИСТОЛЕТ в руках и больше НИЧЕГО в инвентаре то при кнопку на смену оружия НИЧЕГО не происходит. То есть возврат к пустым рукам не происходит,так как нам это не надо.
- если у героя есть ПИСТОЛЕТ в руках и ДРОБОВИК в инвентаре то при кнопку на смену оружия экипируется дробовик
- если у героя есть ДРОБОВИК в руках то при кнопку на смену оружия экипируется пистолет

1 ШАГ

1) Просто делаем всё это ветвлениями и добавлением команд "экипировать". При ветвлении "имеет пистолет" не забываем поставить галочку "включая экипировку"
2) Не забываем приравнять кол-во патронов в кол-ву патронов пистолета/дробовика/другого оружия. А кол-во обойм пистолета приравнят к кол-во обойм в инвентаре
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


Вот вроде и всё,надеюсь ничего не забыл.
Теперь при нажатии на W игрок стреляет, а на кнопку Q - меняет оружие.

Шпаргалка для настройки оружия:
- дальность оружия в маршруте событий "патрон 1 - патрон 4" кол-вом команд "вперед"
- урон оружия в этом же событии, внутри ветвлений с врагами,то есть отнимает из "враг здоровье" число,равное урону
- время перезарядке в общем событии "перезарядка" в "ждать"
- кол-во патронов в магазине также в общем событии "перезарядка"

ДЕМКА

Берем пистолет у того нпс,что выше и правее. При втором нажатии берем дробовик. Стреляем,радуемся, ловим баги багов вроде нет

ссыль
Последнее редактирование: 4 года 11 мес. назад от yuryol.
Администратор запретил публиковать записи гостям.
Время создания страницы: 0.276 секунд