Меню
Видеоучебник

Самоуправление спрайтов

Урок 21. Творческие задания в Sсratch 5-6 классы

На этом уроке ученики узнают о ещё одном способе взаимодействия спрайтов и их скриптов – сообщениях. Будут рассмотрены способы отправки сообщений и их обработки другими спрайтами. Также ученики применят полученные навыки при создании презентации.
Плеер: YouTube Вконтакте

Конспект урока "Самоуправление спрайтов"

Вопросы:

·     Передача и приём сообщений.

·     Расшифровка сообщений.

Ранее в большинстве игр, которые мы делали, всеми спрайтами управлял игрок. В редких случаях спрайты реагировали на касания друг друга. Однако у спрайтов намного больше способов взаимодействия. Один из таких способов – сообщения.

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

В среде Scratch удалим спрайт Царапки. Для решения этой задачи он не нужен. Загрузим фон сцены из рабочей папки. Он находится в файле «Комната». Дальше грузим из рабочей папки спрайт лампы. Выберем файл «Лампа 1». Установим нужный размер лампы и поставим её на стол. Загрузим ещё один костюм лампы из файла «Лампа 2». Как видим, в первом костюме лампа выключена, а во втором – лампа горит. Чтобы лампа включалась и выключалась, она должна менять костюмы.

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

Как же сделать, чтобы при нажатии на выключатель лампа сменила костюм? Это два разных спрайта, и выключатель не может дать лампе команду включиться. Нужно, чтобы выключатель как-то подал сигнал лампе. В этом нам поможет такой инструмент, как сообщения. Как это работает? В любой момент спрайт может отправить сообщение всем другим спрайтам, и все спрайты его увидят. Однако отреагируют на него лишь те спрайты, которые знают, что надо делать при получении этого сообщения. Те спрайты, которые не знают, что нужно делать при получении сообщения, его проигнорируют. Чтобы спрайт знал, что нужно делать при получении сообщения, нужно добавить для него соответствующий скрипт.

Давайте рассмотрим это в Scratch. Нужные блоки находятся в категории «События». Нас интересуют три нижних блока. Первый блок «Когда я получу...» позволяет запустить свой скрипт при получении некоторого сообщения. Блок «Передать» позволяет отправить сообщение всем спрайтам. Третий блок «Передать и ждать» отличается от второго тем, что после отправки сообщения он останавливает свой скрипт до тех пор, пока не завершат свою работу скрипты, вызванные сообщением, после этого скрипт продолжает свою работу.

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

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

Чтобы проверить, как работает блок «Передать и ждать», немного изменим скрипты. В скрипт лампы после смены костюма добавим блок «Ждать две секунды». В скрипте выключателя блок «Передать» заменим на блок «Передать и ждать». И добавим какой-нибудь эффект для спрайта выключателя. Например, возьмём из категории «Внешность» уже знакомый нам блок смены цвета. Изменим цвет выключателя на 50 единиц.

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

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

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

Сделаем, чтобы презентация началась при нажатии на зелёный флажок. Начнём изменять скрипты спрайтов по порядку. Чтобы начальная сцена успешно сработала, достаточно у всех спрайтов в скриптах, которые срабатывают при нажатии клавиши «Ноль», изменить блок запуска на «Когда щёлкнут по зелёному флажку». (Пауза) Так, для запуска начальной сцены нужно лишь нажать на зелёный флажок. Мы можем легко это проверить. Для этого запустим режим презентации и нажмём на зелёный флажок. На экране отобразилась первая сцена сказки, на которой дедушка посадил репку. Отключим режим презентации.

Теперь нужно сделать переход ко второй сцене. Для этого в одном из спрайтов, задействованных в начальной сцене, например в спрайте репки, нужно дополнить скрипт, который запускается при нажатии на зелёный флажок. Сделаем так, чтобы при окончании своей работы он передавал сообщение, которое будут принимать скрипты следующей сцены. Для этого добавим в него блок «Предать». В его выпадающем списке выберем пункт «Новое сообщение». Назовём сообщение «Сцена 2». Теперь найдём у спрайтов скрипты, которые срабатывают при нажатии на единицу. Нужно заменить у них блоки запуска на «Когда я получу...». В выпадающих списках этих блоков нужно указать сообщение «Сцена 2».

Посмотрим, что у нас получилось. Для этого нажмём на зелёный флажок. Практически сразу запустилась вторая сцена. Почему так произошло? Ещё раз посмотрим на скрипт спрайта репки, который мы дополнили. В нём сразу после начальной сцены идёт сообщение для переключения на следующую сцену. Чтобы это исправить, добавим перед блоком передачи сообщения паузу. Сделаем паузу в две секунды. Именно столько времени на экране будет начальная сцена перед появлением второй. Проверим, что у нас получилось, нажав на зелёный флажок. Теперь начальная сцена длится две секунды перед включением второй сцены.

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

Однако третья сцена будет немного сложнее, чем предыдущие. Запустим режим презентации, нажмём на зелёный флажок и посмотрим, что у нас получилось. Сейчас третья сцена заканчивается появлением дедушки, который пытается вытащить репку из земли. Вспомним, что должно быть дальше. А дальше на сцене должны появиться бабушка, внучка и все остальные персонажи. За это отвечает вот этот скрипт, который срабатывает при нажатии на пробел. Удалим его. Нужно сделать так, чтобы персонажи также появлялись автоматически. Так, для появления бабушки добавим в скрипт третьей сцены блок «Ждать 2 секунды», чтобы установить паузу после появления на сцене дедушки, и блок «Следующий костюм», при срабатывании которого на сцене появится бабушка.

Чтобы на сцене появились и остальные персонажи, нужно переключить костюм ещё несколько раз. Всего у этого спрайта 6 костюмов, а значит, нужно 5 переключений между ними. Чтобы так и было, несколько раз продублируем последние два блока. Подумаем, а почему мы не использовали цикл «Повторить» вместо дублирования блоков? Дело в том, что перед появлением разных персонажей паузы должны быть различны. Так, перед появлением бабушки в сказке следуют слова «Пошёл дед репку рвать: тянет-потянет, вытянуть не может. Позвал дед бабку». А перед появлением мышки слова: «Кошка за Жучку, Жучка за внучку, внучка за бабку, бабка за дедку, дедка за репку – тянут-потянут, а вытянуть не могут. Позвала кошка мышку». Во втором случае слов значительно больше. Пока время пауз менять не будем потому, что у каждого рассказчика оно своё.

После появления на сцене мышки также установим паузу в две секунды и добавим блок для передачи сообщения о переходе к следующей сцене. Назовём сообщение «Сцена 4». Теперь найдём у спрайтов скрипты, которые срабатывают при нажатии на клавишу 3. Заменим у них блоки запуска на «Когда я получу...», в которых укажем сообщение «Сцена 4».

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

Мы узнали:

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

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

·     Спрайт реагирует на сообщение только если у него есть скрипт, который запускается при получении этого сообщения, в противном случае сообщение игнорируется.

·     Блок «Когда я получу...» позволяет запустить скрипт при получении указанного сообщения.

950

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт