Вопросы:
· Запуск скрипта с помощью мыши.
· Запуск скрипта с помощью клавиатуры.
Мы уже создали довольно много спрайтов и составили для них достаточно скриптов. Однако у большинства скриптов, которые мы составили, было нечто общее. Большинство из них начиналось с одного и того же блока – “Когда щёлкнут по зелёному флажку”. То есть все скрипты запускались одновременно при нажатии на зелёный флажок. Но что делать, если нужно запустить какой-то конкретный скрипт, не запуская при этом остальные? В этом нам помогут дополнительные возможности для запуска.
Рассмотрим пример. Мальчик Дэни большой модник. У него есть несколько разноцветных рубашек, несколько разноцветных джинсов и несколько пар обуви. Он попросил нас с помощью Scratch помочь ему узнать, какие рубашка, джинсы и обувь лучше всего сочетаются.
Всё, что нужно для решения задачи, есть в библиотеке Scratch. Добавим спрайт мальчика Дэни. Он есть в библиотеке Scratch в теме «Одевалка». Посмотрим на костюмы спрайта Дэни. С их помощью можно выбрать причёску. Выберем короткую стрижку, это третий костюм.
Теперь добавим из библиотеки Scratch спрайты одежды. Все они находятся всё в той же теме «Одевалка». Начнём с рубашки. Разместим её спрайт поверх спрайта Дэни. Размер рубашки идеально подходит. У рубашки есть три костюма различных цветов. Точно так же добавим из библиотеки и разместим поверх спрайт джинсов. У него два костюма, которые также отличаются цветом. Последней добавим также обувь, например вот такие кеды. Однако у кедов один единственный костюм.
Для того чтобы можно было менять обувь, добавим из библиотеки новый костюм для спрайта обуви. Добавим вот такие туфли. Однако туфли сместились и теперь находятся не на ногах Дэни. Это произошло потому, что центры костюмов туфлей и кедов не совпадают. Исправим это. Посмотрим, где центр у костюма кедов. Установим центр туфлей в том же месте. Теперь туфли на ногах Дэни. Чтобы одежда сочеталась нормально, сделаем так, чтобы джинсы находились слоем выше обуви, а рубашка слоем выше джинсов.
Теперь сделаем так, чтобы можно было менять рубашки, джинсы и обувь по щелчку мыши. Мы это уже умеем, и некоторые наверняка догадались, как это можно сделать. Составим для рубашки скрипт, который уже привычно будет начинать свою работу при нажатии на зелёный флажок и будет работать до остановки пользователем. В цикле установим блок для сокращённой формы ветвления. В ветвление установим блок составного условия с союзом «И». Сделаем так, чтобы условие было истинно, когда левая кнопка мыши нажата и при этом указатель мыши касается спрайта. В ветвлении будет единственный блок из категории «Внешность» – «Следующий костюм».
Проверим, как работает данный скрипт. При щелчке мыши на рубашке её цвет действительно меняется. Однако есть несколько проблем. Для начала работы пользователь всё ещё должен нажать на зелёный флажок, хотя при этом ничего не происходит. Если отпустить левую кнопку мыши не сразу, то цвет рубашки изменится несколько раз. К тому же для такого простого действия, как смена костюма, приходится составлять довольно сложную и громоздкую конструкцию блоков.
Но скрипт для смены костюмов можно сделать намного проще, для этого достаточно знать, как можно иначе запустить скрипт. Все блоки для запуска скриптов находятся в категории «События». Они имеют одинаковую форму, которая говорит о том, что другие блоки к ним можно присоединить только снизу. Обратим внимание на третий блок «Когда спрайт нажат». Он позволяет запустить скрипт спрайта на выполнение, просто нажав на спрайте левой кнопкой мыши. Перенесём его в рабочее поле спрайта, а к нему присоединим блок «Следующий костюм».
Теперь, чтобы такой скрипт работал, не нужно нажимать на зелёный флажок. Достаточно лишь щёлкнуть по рубашке, чтобы она сменила свой цвет. Так при одном нажатии на левую кнопку мыши костюм меняется всего один раз, а не несколько, как это было раньше. Составим точно такие же скрипты для оставшихся спрайтов одежды, то есть для обуви и джинсов. Теперь Дэни может легко подобрать удачные сочетания одежды с помощью созданного нами проекта. Сохраним его в нашей рабочей папке под именем «Одевалка».
Мы научились запускать скрипты с помощью щелчка мыши по спрайту, но это не всегда удобно. Так, сначала спрайт может быть спрятан или находиться за сценой и на него нельзя нажать или же таких спрайтов может быть много. Что же тогда делать? Рассмотрим такой пример. Нас попросили рассказать младшим детям сказку о репке, сопроводив её соответствующими рисунками в Scratch.
Первым делом вспомним сказку о Репке. В ней дедушка посадил репку, но она выросла настолько большой, что дедушка не смог её вытащить. Он обратился за помощью к бабушке. Бабушка обратилась за помощью к внучке, внучка – к собаке Жучке, Жучка – к кошке, а кошка – к мышке. И только все вместе они смогли вытащить репку.
Создадим новый файл и удалим спрайт Царапки. В сказке есть своя кошка. Загрузим из нашей рабочей папки фон сцены. Он находится в файле «Поле». Теперь перейдём к спрайтам. Для начала загрузим спрайт репки из рабочей папки, из файла «Репка один». Как видим, эта репка немного обрезана. Это нужно для того, чтобы посадить её. Установим репку в левом краю поля, как будто она посажена. Дедушка в сказке будет встречаться дважды. В первый раз, когда сажает репку, а во второй – когда он пытается вытащить репку. Это будут два разных спрайта. Загрузим первый спрайт дедушки. Он находится в файле «Дедушка». Установим подходящий размер спрайта. Поставим дедушку рядом с репкой.
Теперь мы можем начать писать скрипты для спрайтов. Спрайтов будет много, и привязать запуск всех скриптов к одному действию не получится, поэтому сделаем, чтобы скрипты запускались при нажатии на клавиши. В этом нам поможет ещё один блок из категории «События». Это блок «Когда клавиша нажата». Как видите, в нём с помощью выпадающего списка можно назначить блоку клавишу. Назначим для начальной сцены клавишу 0. Во время этой сцены дедушка сажает репку, то есть мы должны отобразить спрайт дедушки. Для этого добавим в скрипт блок «Показаться». Репка в начальной сцене ещё не выросла, поэтому при нажатии на клавишу «Ноль» мы её спрячем.
Для следующей сцены назначим клавишу 1. В этой сцене репка выросла и её нужно показать. Для этого добавим в скрипт блок «Показаться». Дедушка ещё не пришёл собирать репку, поэтому при нажатии на единицу спрячем спрайт дедушки.
В следующей сцене дедушка должен прийти собирать репку. Как мы говорили раньше, у дедушки в этой сцене будет уже другой спрайт. Однако этот спрайт будет немного хитрее. В этом же спрайте будут и все остальные герои сказки, заканчивая мышкой. Как же это сделать? На самом деле всё просто. Загрузим новый спрайт из файла. В нашей рабочей папке перейдём в папку «Персонажи». Загрузим из неё файл «Персонажи 1». Добавим в этот спрайт костюмы из файлов от «Персонажи 2» до «Персонажи 6». Обратим внимание, чтобы порядок костюмов соответствовал номерам. Первый костюм этого спрайта состоит из одного дедушки, во втором костюме к дедушке присоединяется бабушка, в третьем костюме к ним присоединяется внучка и так далее. В шестом костюме присоединяется мышка. Установим нужный размер спрайта и поставим его на сцене так, чтобы руки дедушки вытаскивали репку.
Для этого спрайта составим несколько своих скриптов. В начальной сцене этот спрайт должен быть спрятан, поэтому при нажатии на клавишу 0 у этого спрайта будет выполняться блок «Спрятаться». Дедушка должен появиться в сцене после того, как репка выросла. Будем вызывать эту сцену при нажатии на клавишу 2. Важно убедится, что у спрайта будет первый костюм. Поэтому добавим в скрипт блок «Сменить костюм на “Персонажи 1”». Дальше, чтобы дедушка появился на сцене, добавим блок «Показаться». Дальше должны по одному появиться остальные персонажи сказки. Для этого достаточно переключаться между костюмами спрайта. Добавим этому спрайту ещё один скрипт, который будет срабатывать при нажатии на клавишу «Пробел». В нём будет блок «Следующий костюм».
Дальше нужно описать последнюю сцену. В ней репку уже вытащили, и она находится в руках у дедушки. Нужно сперва добавить ещё один спрайт репки. Загрузим его из файла «Репка 2». Установим размер новой репки так, чтобы она была похожа на уже имеющуюся. Установим её рядом с дедушкой, так, как это показано на экране. Чтобы новая репка оказалась в руках у дедушки, поместим спрайт персонажей в верхнем слое с помощью блока «Перейти в верхний слой».
Новую сцену будем вызывать с помощью клавиши 3. Перейдём к первому спрайту репки и добавим ему скрипт, который будет запускаться при нажатии на эту клавишу. Мы должны скрыть старую репку, поэтому добавим в скрипт блок «Спрятаться». Во втором спрайте репки составим скрипт для клавиши 3, в котором будет блок «Показаться». Не забываем, что в начальной сцене репки на экране быть не должно, поэтому при нажатии клавиши 0 будем прятать этот спрайт.
Протестируем то, что у нас получилось. Для этого перейдём в режим презентации и начнём выполнять все действия в нужном порядке. При нажатии на клавишу 0 на сцене оказывается дедушка. При нажатии на 1 он исчезает и на поле вырастает репка. При нажатии на 2 появляется дедушка, который пытается вытащить репку. Если нажать на пробел несколько раз, то на сцене по очереди появляются и остальные персонажи сказки. И, наконец, при нажатии на 3 репку удаётся вытащить. Всё замечательно работает! Сохраним проект по сказке в нашей рабочей папке под именем «Репка».
Мы узнали:
· Все блоки запуска скриптов Scratch находятся в категории «События».
· Запустить скрипт с помощью мыши позволяет блок «Когда спрайт нажат». Он запускает скрипт при щелчке левой кнопкой мыши на соответствующем спрайте.
· Запустить скрипт с помощью клавиатуры позволяет блок «Когда клавиша нажата». Он позволяет установить клавишу, нажатие которой перейдёт к срабатыванию скрипта.