Вопросы:
· Перемещение спрайтов между слоями.
· Звуки в Scratch.
На прошлом уроке мы начали создание мультипликационного сюжета о коте и собаке. Вспомним его описание. Собака загнала кота на дерево в середине лесной поляны. Кот перемещается по стволу дерева вверх и вниз мяукая, а собака тем временем бегает вокруг дерева и лает. Загрузим наш проект из рабочей папки и вспомним, что мы уже сделали. Мы подготовили сцену и спрайты, установив центры костюмов. Также мы описали скрипт для движения кота. Как здорово он поднимается и соскальзывает с дерева!
Итак, теперь нам нужно анимировать движение собаки. Но прежде, чем начать, разберёмся, как собака должна двигаться. В описании сказано, что собака двигается вокруг дерева. Но мы знаем, что в Scratch спрайты могут двигаться только по прямой. Пусть собака двигается по пути в форме ромба, находящегося внутри поляны и с деревом в центре.
Пусть собака начнёт движение с левого угла ромба и будет двигаться против часовой стрелки. Установим спрайт собаки в начальное положение. Сразу откроем окно информации о спрайте, чтобы видеть его координаты. Установим собаку здесь. Координаты этой точки (-100; -100). Сразу же начнём описание скрипта. Начнём его, как обычно, с блока «Когда щёлкнут по зелёному флажку». В начале переместим собаку в начальную точку с помощью блока «Перейти в...». Укажем координаты точки (-100; -100).
Теперь подумаем, как сделать, чтобы собака двигалась по ромбу. Вначале зададим первую сторону ромба. Если сначала собака будет двигаться в направлении 90 градусов, то она упрётся в дерево, так как собака описывает ромб против часовой стрелки, она должна пробежать перед деревом. Зритель увидит, будто она пробежала немного ниже. Чтобы так получилось, нужно отложить какой-то небольшой угол по часовой стрелке от направления 90 градусов. На вскидку возьмём угол в 20 градусов. Ели добавим к 90 градусам 20, получим угол в 110 градусов. Именно в этом направлении собака должна бежать сначала. Повернём спрайт в этом направлении с помощью блока «Повернуться в направлении...», в котором с помощь клавиатуры укажем направление 110 градусов.
Но какой длины должна быть сторона ромба? Это мы определим подбором. Сначала сделаем так, чтобы собака прошла десять раз по десять шагов. Для этого добавим цикл «Повторить...», в котором количество повторений укажем равным 10. В него поместим блок «Идти 10 шагов». После того как спрайт пройдёт 10 шагов, он должен сменить костюм на следующий. Чтобы действия не выполнялись слишком быстро, добавим в цикл блок ожидания в течение 0,1 секунды.
Запустим скрипты на выполнение. Кот всё ещё исправно перемещается на дереве, при этом спрайт собаки повернулся в направлении сто десять градусов, то есть ниже, и продвинулся на некоторое расстояние. Остановим выполнение скриптов. Чтобы собака так странно не ворочалась, изменим стиль её вращения на «Относительно центральной оси». Теперь собака смотрит вправо. Снова запустим скрипты на выполнение. Теперь собака бежит, продолжая смотреть вправо. Нам видно, что если бы собака прошла достаточное расстояние, то её середина оказалась бы напротив ствола дерева. Снова остановим выполнение скриптов. Чтобы увеличить расстояние, пробегаемое собакой, увеличим количество повторений цикла до 12.
Снова запустим скрипты на выполнение. Теперь собака останавливается ровно напротив ствола дерева. Теперь мы знаем, как далеко должна бежать собака, чтобы описать одну сторону ромба. Остановим выполнение скриптов. Теперь определим направление, в котором дальше должна бежать собака, чтобы описать ромб. Для этого отложим от 90 градусов тот же угол 20 градусов, но уже против часовой стрелки. Отняв от 90 градусов 20, мы получим направление 70 градусов. Чтобы определить направление для двух оставшихся сторон, отложим тот же угол 20 градусов против часовой стрелки и по часовой стрелке от направления -90 градусов. Получим направления -70 градусов и -110 градусов.
Вернёмся к скрипту собаки. Продублируем в нём команды начиная с поворота и добавим в конец скрипта. И ещё раз проделаем то же самое, чтобы получить команды для описания всех четырёх сторон ромба. В трёх последних блоках поворотов укажем соответственно направления 70 градусов, -70 градусов и -110 градусов. Снова запустим скрипт на выполнение. Теперь собака пробегает все четыре стороны ромба в правильном направлении и останавливается. Чтобы собака не останавливалась, добавим после первой команды перехода в точку цикл «Всегда», внутрь которого поместим все оставшиеся команды скрипта.
Снова запустим скрипт на выполнение. Теперь собака бегает, описывая ромб безостановочно. Правда, описывая дальние стороны ромба, она пробегает перед деревом, хотя должна пробегать за ним. Почему так происходит? Дело в том, что все объекты на сцене Scratch, включая фон самой сцены, разделены по слоям. В нижнем слое располагается фон сцены. Выше идут спрайты, при чём каждый в своём слое. Дело в том, что спрайт собаки занимает верхний слой, то есть со стороны зрителя он находится перед деревом и котом. Чтобы пройти за деревом, спрайт собаки должен переместиться на два слоя вниз, то есть оказаться в слое за деревом и котом.
Команды для перемещения по слоям находятся в категории «Внешность». Нас интересует блок «Перейти назад...». Установим его в скрипте перед циклом для описания третьей стороны ромба. Чтобы собака пробегала ближние стороны ромба перед деревом, перед циклом для описания первой стороны добавим блок «Перейти в верхний слой». Снова запустим скрипт на выполнение. Теперь собака действительно бегает вокруг дерева.
Кто-то может посчитать, что наш сюжет уже готов: кот пытается влезть на дерево, а собака бегает вокруг него. Но чего-то здесь не хватает. Ещё раз обратимся к описанию сюжета. В нём сказано, что кот должен мяукать, а собака – лаять. Как это сделать? Мы можем сделать это с помощью блока «Говорить», но не все же звуки отображать с помощью рамок с текстом. У нас есть и другая возможность. Оказывается, спрайты Scratch могут издавать звуки.
Для начала сделаем, чтобы кот мяукал. Переключимся на спрайт кота. Для управления звуками у спрайтов есть вкладка «Звуки», перейдём в неё. Все звуки, спрайта отображаются здесь. Мы видим, что у кота есть какой-то звук. Прослушаем его, нажав на кнопку воспроизведения. Он совершенно не подходит коту. Удалим его. Для этого щёлкнем по его иконке правой кнопкой мыши и в появившемся контекстном меню выберем пункт «Удалить». Нам нужно добавить звук мяуканья. Добавить новый звук для спрайта можно с помощью этих трёх кнопок. Прочитав их подсказки, можно узнать, что звук можно выбрать из библиотеки Scratch, записать с помощью микрофона или загрузить из файла. Поищем нужный звук в библиотеке Scratch. Выберем категорию «Животные». Кажется, звук с названием «meow» нам подойдёт. Прослушаем его, нажав на кнопку воспроизведения рядом с его иконкой. Это то, что нам нужно. Чтобы добавить звук для спрайта, нажмём по его иконке левой кнопкой мыши, а затем на кнопку «ОK».
Мы добавили звук для кота, но как сделать, чтобы кот его воспроизводил? Для этого нужно добавить соответствующие команды в его скрипт. На вкладке «Скрипты» перейдём в категорию «Звук». Сегодня мы рассмотрим первые два блока из этой категории. Сделаем так, чтобы кот мяукал, перед тем как съехать по стволу вниз. Для этого выберем блок «Играть звук...» и установим его в скрипт перед командой «Плыть». В выпадающем списке можно выбрать любой из звуков спрайта. У нашего кота только звук «meow», его и укажем в блоке. Запустим скрипты на выполнение. Он работает так же, как и раньше, только теперь, когда у кота заканчиваются силы взбираться вверх, он жалобно мяукает и соскальзывает вниз. Остановим скрипты.
Теперь так же, как мы это сделали для кота, добавим для собаки звук лая. Он находится в библиотеке Scratch, в категории «Животные», под именем «dog1». «Dog» в переводе означает «собака». Прослушаем его прежде, чем добавить. Это то, что нужно. Мы, конечно, можем как-нибудь добавить лай собаки в существующий скрипт её движения, но поступим немного иначе и сделаем лай собаки не зависимым от её бега. Для этого в рабочем поле собаки создадим отдельный скрипт для лая. Он также будет начинать свою работу при нажатии на зелёный флажок и будет повторяться во время всего показа сюжета. Добавим в цикл блок «Играть звук “dog1”» и запустим скрипты на выполнение.
Собака начала заикаться вместо того, чтобы нормально лаять. Остановим скрипты. Дело в том, что не успевает воспроизвестись первый лай собаки, как начинается второй. Изменим скрипт для лая собаки. Удалим из него блок «Играть звук», а вместо него поставим блок «Играть звук до конца», в котором укажем звук «dog1». Снова запустим скрипты. Теперь собака не заикается, правда, лает она постоянно, а выглядит это неестественно. Сделаем лай разнообразным. Для этого остановим выполнение скриптов и увеличим количество блоков лая в цикле до шести. Добавим между ними несколько различных по продолжительности пауз. Снова запустим скрипты. Кот мяукает всё так же, а вот собака лает по-разному. Теперь формально скрипт соответствует описанию. Только кажется, что среди звуков чего-то не хватает. Давайте подумаем. У нас на экране лесная поляна, а абсолютно тихого леса не бывает. Остановим скрипты и добавим звуки леса.
Для сцены, как и для спрайтов, можно добавлять звуки и задавать скрипты. Добавим для сцены подходящие звуки. Из библиотеки Scratch добавим звуки «bird», что в переводе означает «Птица», и «Crickets», что в переводе означает «Сверчки». Составим скрипты для звучания сверчков и птицы. Как и остальные звуковые скрипты, они будут начинать свою работу при нажатии на зелёный флажок и повторяться, пока пользователь просматривает сюжет. Сверчки будут звучать на фоне постоянно, а звучание птицы будет разнообразным благодаря повторениям и паузам.
Снова запустим скрипты на выполнение. Теперь зазвучал и лес. Правда, пение птицы слишком громкое и перекрывает остальные звуки. Чтобы это исправить, не выключая скрипты, перейдём на вкладку «Звуки» и выделим иконку звука птицы. Справа показалась звуковая дорожка этого звука. Выделим её, проведя по ней курсором с нажатой левой кнопкой мыши. Откроем список возможных эффектов и выберем эффект «Мягче». Теперь птица звучит тише. Нам остаётся только включить режим презентации и наблюдать за результатом. Всё работает, как и было задумано. Мы создали целый мультипликационный сюжет. Сохраним проект.
Мы узнали:
· Все спрайты и сцена Scratch распределены по слоям, при этом нижний слой занимает фон сцены, а каждый спрайт занимает свой слой.
· Перемещать спрайты между слоями можно с помощью блоков в категории «Внешность».
· Спрайты и сцена могут издавать звуки, управлять ими можно на вкладке «Звуки» и в категории «Звук» на вкладке «Скрипты».