Menu
Classic Snake

Управление: w,a,s,d

Обновите страницу, если хотите сыграть ещё раз.

Откройте исходный файл и читайте статью.

Создание игры «Змейка». Часть вторая.

Продолжаем делать Змейку. В этой части речь пойдет о решении двух проблем:

  • змейка не должна поворачивать в противоположном направлении,
  • на повороте у змейки должна быть анимация для изгиба.

Для решения этих задач придется слегка изменить код. Приступим!

Исключение возможности поворачивать в противоположном направлении

Создается строковая переменная  «Направление» у головы змеи (в примере из clickteam используется числовая переменная, где каждому направлению присвоено число). Значением переменной будут слова: «влево», «вправо», «вверх» и «вниз». Т.к. в начале змея движется вправо, то и по умолчанию переменная будет иметь значение «вправо».

Snake текстовая переменная направления

Далее, в событиях управления меняем действие установки направления головы, на установку соответствующего значения переменной «Направление».

Змейка. Меняем события управления

Теперь достаточно в события управления добавить условие — Если переменная  «Направление» не равна значению противоположного направления.
Т.е., другими словами, в событии где устанавливается поворот направо, условие будет — «Если направление головы не влево» и т.д.

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

Крайне не советую строить логику следующим образом:
Snake исключить возможность противоположного поворота

Это не решит проблему, и к тому же вызовет баг при построении событий анимации изгиба змеи.

Затем, в событии движения условие направления (Direction) головы сменяется сравнением значения переменной «Направление», а направление головы устанавливается в этом событии.

Змейка. Направление движения отслеживается при помощи переменной

Теперь направление движения отслеживается при помощи переменной. И игрок не может повернуть влево, если змейка ползет направо и т.д.

Анимация изгиба змейки на повороте

Во-первых, хвост змеи должен иметь необходимую анимацию изгибов.
Snake направление поворота
Snake направление поворота
Snake направление поворота
Snake направление поворота

Во-вторых, нужно определить из какого направления произошел поворот, что бы применить нужную анимацию. Для этого нужно сравнивать направление текущего шага змеи с направлением её предыдущего шага. Для этого будем использовать переменную хранящую предыдущее направление. Создадим ещё одну строковую переменную — «Предыдущее направление». Значением переменной так же будут слова: «влево», «вправо», «вверх» и «вниз». По умолчанию переменная будет иметь значение «вправо».
Змейка. Создание переменной Предыдущее направление

Теперь нужно присвоить переменной соответствующее значение в событиях движения.

Змейка. Значение Предыдущего направления 1

Змейка. Значение Предыдущего направления 2
Далее, вместо 4 событий движения, будет использоваться 12 событий. На каждое направление по 3 условия предыдущего направления. И в этих событиях будет установлена анимация поворота хвоста.
Так например для движения вправо будет 3 события:

  1. предыдущий шаг был вправо и текущий шаг вправо,
  2. змея двигалась вверх и повернула вправо,
  3. двигалась вниз и повернула вправо.

Змейка. Установка верной анимации хвоста

Внимание: очень важно что бы событие в котором «Направление» и «Предыдущее направление» одинаковы было выше двух остальных. В противном случает произойдет баг создания лишней части хвоста.

Т. к. код выполняется сверху вниз, то в ситуации, когда змея переходит из направления вверх в направление вправо, и переменной «Предыдущее направление» присваивается значение «вправо», а за тем в коде стоит событие когда и предыдущий и текущий шаг имеют направление вправо создается лишний объект хвоста.
Snake неправильный порядок событий
Snake баг создания лишнего хвоста

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

Змейка изгибается

Скачать исходный файл

Вот и все! Основной алгоритм игры змейка готов. Далее вы можете развивать игру по своему усмотрению например: добавить очки за подбор съедобной точки, построить уровни с препятствиями различной сложности, добавить событие победы когда змея достигает определенной длинны и т.д.

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

Оставляйте ваши комментарии)

Продолжаем делать Змейку. В этой части речь пойдет о решении двух проблем: змейка не должна поворачивать в противоположном направлении, на повороте у змейки должна быть анимация для изгиба. Для решения этих задач придется слегка изменить код. Приступим! Исключение возможности поворачивать в противоположном направлении Создается строковая переменная  «Направление» у головы змеи (в примере из clickteam используется числовая переменная, где каждому направлению присвоено число). Значением переменной будут слова: «влево», «вправо», «вверх» и «вниз». Т.к. в начале змея движется вправо, то и по умолчанию переменная будет иметь значение «вправо». Далее, в событиях управления меняем действие установки направления головы, на установку соответствующего значения переменной «Направление». Теперь…

10

Рейтинг: 5 ( 1 голосов)

    Рейтинг: 4,33 ( голосов - 6 )
Загрузка...
Комментариев: 3
  1. Анонимус:

    Полезно

  2. niks:

    отличный урок. :wink:

Вы можете изменить изображение аватара на сервисе Gravatar

Добавить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)

Вступай в группу!