Loko™ |
Дата: Среда, 14.11.2012, 21:36 | Сообщение # 1 |
Сообщений: [146]
|
Всем привет, в этой статье я хотел бы вместе с вами создать несколько поведений для противника.
Поведение №1. Патрулирующий Описание: Противник патрулирует определенную область. Т.е. передвигается из одного места в другое. Как будет реализовано: Мы создадим противника и две стенки. При касании противником одной из стенок, он разворачивается на 180 градусов.
Создаем врага: Insert an object – Sprite – рисуем противника – сохраняем Переименуйте только что созданный спрайт в theEnemy.
Создаем стену: Insert an object – Sprite – рисуем стену (в игре она будет невидимой, так что сильно не старайтесь ) – сохраняем Переименуйте только что созданный спрайт в block.
Размещаем одну стену, копируем ее (ПКМ - Copy), вставляем (ПКМ - Paste) и размещаем вторую стену в другом месте. Между этими стенами помещаем противника.
Сделаем стены невидимыми в игре: Выделяем стену – Properties – ставим галочку напротив Invisible on start
Сделаем так, чтобы противник смог “ходить” по прямой линии, для этого добавим ему поведение Bullet (Пуля): Выделяем theEnemy – Properties – Behaviors – Add – Bullet – Insert
Можно сразу же обратить внимание на некоторые параметры этого поведения: Speed – это скорость передвижения; Acceleration – ускорение; Destroy when – когда нужно уничтожать объект (Outside layout – если объект вышел за пределы уровня; Offscreen – если объект вышел за пределы видимости экрана; Never – никогда; Range exceeded – при превышении диапазона).
Переходим в редактор событий (Event Sheet Editor).
Событие: Insert event – theEnemy – On collision with another object – Pick an object - block
Действие: New action – theEnemy – Set angle – в нижнем окне выбираем theEnemy – Get angle – в поле Angel прописываем “theEnemy.Angle + 180” (без кавычек) – Finish
Только что мы сделали так, что при соприкосновении противником стены – он поворачивался на 180 градусов.
Поведение №2. Стрелок Описание: Противник стоит на месте и стреляет по прямой через определенные интервалы времени. Как будет реализовано: Мы создадим противника, пулю и заставим его через каждые полторы секунды стрелять.
Создаем противника: Insert an object – Sprite – рисуем противника – сохраняем Переименуйте только что созданный спрайт в theShoot.
Создадим пулю, которую будет испускать противник: Insert an object – Sprite – рисуем пулю – сохраняем Переименуем только что созданный спрайт в bul.
Дадим объекту bul поведение пули: Выделяем bul – Properties – Behaviors – Add – Bullet – Insert
Переходим в редактор событий (Event Sheet Editor).
Событие: 1. Insert event – theShoot – Object is on-screen? 2. Insert new condition – System – Every X milliseconds – пишем значение 1500 – Finish
Действие: New action – theShoot – Spawn another object – Pick an object – bul – не забывайте в поле Layout указать номер слоя, на котором должна быть создана пуля - Finish
В событии №1 мы указали условие, при котором противник начнет стрельбу, т.е. только тогда, когда он видим на экране. Если вы хотите, чтобы противник стрелял всегда – поставьте System – Always. Во втором событии мы установили интервал, через который противник будет стрелять. В действии мы, собственно, сделали так, чтобы противник начал стрелять.
Все бы хорошо, но противник стреляет вправо! Сделаем так, чтобы он стрелял налево: Выделяем theShoot - Properties - в поле Angle пишем 180 (указали направление взгляда противника) - ставим галочку напротив Auto mirror (автоматическое отзеркаливание по горизонтали). Ну вот, теперь все так, как нужно.
Поведение №3. Преследующий Описание: Героя начинают преследовать множество противников, которые следуют точно ему по пятам Как будет реализовано: Мы создадим героя и нескольких противников. Противникам дадим поведение Custom Movement и с помощью редактора событий заставим их каждую секунду следовать в направлении героя.
Создаем героя: Insert an object - Sprite - рисуем отважного рыцаря - сохраняем Переименуйте только что созданный спрайт в bazis
Создаем противника: Insert an object - Sprite - рисуем что-то маленькое и с крыльями - сохраняем Переименуйте только что созданный спрайт в flyEnemy. Сделайте несколько копий противника и раскидайте их по уровню.
Дадим противникам поведение Custom Movement: Выделяем flyEnemy - Properties - Behavior - Add - Custom Movement - Insert
Переходим в редактор событий (Event Sheet Editor).
Событие: Insert event - System - For Each Object - Pick an object - flyEnemy - Finish
Подсобытие: Правой кнопкой мыши по только что созданному событию - Insert sub-event - flyEnemy - Compare X position - в графе Comparison выбираем Less or Equal, в X co-ordinate пишем "bazis.X + 500" (без кавычек) - Finish
Действия для подсобытия: 1. New action - flyEnemy - переходим во вкладку Custom Movement - Change angle towards object - Pick an object - bazis - Finish 2. New action - flyEnemy - переходим во вкладку Custom Movement - Change speed - Set, Speed = 200 - Finish
Событие - мы выделили всех противников flyEnemy. Подсобытие - установили причину начала движения противников. Т.е. если герой находится на расстоянии меньше, чем в 500 единиц - flyEnemy начинают движение в сторону героя. Действие 1 - задаем направление движения противников (т.е. их цель - герой). Действие 2 - задаем скорость движения противников.
Данная техника вычисляет расстояние между героем и противником по оси X. Если вам нужно вычисление расстояния по оси Y, то в подсобытии выбираем Compare Y position, и не забываем изменить X на Y в выражении "bazis.X + 500"
Надеюсь, принцип создания ИИ вам понятен, и вы сможете реализовать то, что вам нужно. С вами был Loko™, успехов!
Сообщение отредактировал: Loko™ - Воскресенье, 18.11.2012, 20:49 |
|
| |