Запустите SWF двойным кликом. Сыграйте несколько уровней (здесь включено только четыре) и обратите внимание на поведение акул. Они управляются довольно простым, но эффективным AI. В этом разделе вы изучите, как был создан AI, очень похожий на этот.
Правила управления персонажами
Откройте файл run_away.fla в папке Chapter09. Этот файл содержит AI противника для неоконченной игры под названием Grave Robber (Расхититель могил). Здесь мы увидим как противники (называемые также «злодеи») ведут себя. Злодеи представляют собой зомби, а хороший парень (ну, насколько хорошим может быть вор) является человеком – он управляется вами. Вы бегаете повсюду, пытаясь разграбить могилы, а зомби пытаются «достать» вас. Имеются стены, через которые вы не можете пройти. В этом файле не реализовано обнаружение столкновений между героем и злодеями, так как мы лишь иллюстрируем поведение. Внимание: этот файл (и в действительности каждый файл примера, который мы используем в этой главе) использует плитки, так что если вы еще не познакомились с плиточными мирами, то потратьте на это время (см. Главу 7). Мы будем рассматривать лишь код ActionScript, используемый в AI для этого файла, но не создание мира и не обработку столкновения со стенами.
В этот момент вашей одиссеи по нашей книге, вы готовы закончить эту игру самостоятельно!
Протестируйте фильм, чтобы посмотреть на этот мир. Побегайте везде и попытайтесь обратить внимание на поведение вражеских зомби. AI, который применен здесь, очень похож на AI, примененный в игре Shark Attack!
В коде программы есть фрагмент, которые мгновенно изменяет направление движение противника. Чтобы быть кратким, я буду вызывать код этого фрагмента «коррекция». Теперь давайте посмотрим на правила, которым следуют зомби в этой коррекции для выполнения их задачи: выйти на вора.
Движение персонажа ограничено в каждый момент времени горизонтальным или вертикальным направлением.
Скрипт коррекции проверяет положение героя относительно противников, и сохраняет информацию в следующей форме:
Горизонтальное движение
-1, если герой находится слева от противника
0, если герой в той же колонке
1, если герой находится справа от противника
Вертикальное движение
-1, если герой находится выше
0, если герой находится в той же строке
1, если герой находится ниже
Если и горизонтальное и вертикальное значения равны 0, то противник находится в той же плитке, что и герой, и коррекция не изменяет путь его движения