Одновременное выполнение скриптов (программ)
Вспомните, как двигались три объекта на прошлом занятии. Они шли вместе, одновременно. Несмотря на то, что движение у каждого было свое (кот ходил слева направо, второй герой под углом в 45 градусов, а третий просто крутился на месте), они все равно начинали движение в одно и то же время — при нажатии на кнопку запуска. Это был пример, когда мы можем говорить об одновременном (параллельном) выполнении разных блоков команд (скриптов). В серьезном программировании используются другие, более умные слова (многопоточность и т.п.).
При этом в Scratch можно сделать так, что два (или больше) скрипта одновременно будет выполнять вообще один объект. Допустим, кот будет шагать и при этом менять свои размеры, форму и другие свойства. При этом ходьба и изменение свойств друг с другом никак не будут связаны. Сделать это можно, например, разместив два разных скрипта в ячейке скрипты для кота:
При щелчке на кнопке запуска начнут работать оба скрипта сразу. Первый будет заставлять кота ходить слева направо. Это нам уже знакомо. Второй скрипт будет менять внешний вид кота. Фиолетовые команды связаны с кнопкой внешность. Во втором скрипте выше используется команда изменить … эффект на .... После слова «изменить» в раскрывающемся списке можно выбрать понравившийся нам эффект, а в поле с числом прописать, на сколько единиц его изменять. Команда убрать графические эффекты возвращает объект к его исходному внешнему виду. Итак, второй скрипт в цикле всегда выполняет следующие действия: изменяет цвет объекта, оставляет объект в таком состоянии на 1 секунду, возвращает объект к прежнему цвету, искривляет объект с помощью завихрения, оставляет в таком состоянии на 1 секунду, возвращает к исходной форме. Составьте два подобных скрипта для одного объекта. Можете попробовать другие графические эффекты (например, рыбий глаз или мозаику).
Последовательное выполнение скриптов (программ)
При последовательном выполнении скриптов сначала все действия должен совершать один объект, затем второй и т.д. Как же это можно сделать в Scratch?
Например, можно просто использовать команду ждать в начале скрипта второго объекта. Но на самом деле это будет никакое не последовательное выполнение скриптов, т.к. оба они начнут работать одновременно, просто у второго объекта сначала будет долго работать команда ждать. Хотя на сцене можно таким образом получить желаемый эффект: сначала действия будет совершать один объект, а через некоторое время - другой.
Рассмотрим, более грамотный способ организации последовательного выполнения скриптов. Когда один объект завершает выполнение ряда своих команд, он должен подать какой-нибудь сигнал-сообщение второму объекту, а тот, в свою очередь, должен его принять. В Scratch для этого есть две специальные команды, связанные с кнопкой контроль: передать ... и когда я получу .... Команда передать ... дается объекту, который уже закончил все или некоторые свои действия, а когда я получу ...применяется к объекту, который начинает работать вторым. Вместо трех точек в этих командах вписывается сообщение, которые мы сами назначаем.
Организуем для двух объектов последовательное выполнение скриптов. Допустим, по нашему сценарию планируется такая анимация: кот сначала ходит туда-сюда, после чего исчезает, и по экрану начинает метаться сыр (например).
Если у вас сейчас в ячейке скриптов кота две программы, то удалите ту, которая меняет внешний вид объекта, чтобы она нас никак не вводила в заблуждение.
Первый скрипт кота надо изменить на такой:
В команде передать ... надо вставить сообщение. Для этого открывается специальное окно, куда можно его вписать. Команда спрятаться используется для того, чтобы скрыть кота, после того, как он пошлет сообщение. Команда показаться в начале скрипта требуется, чтобы снова отобразить объект, если он был спрятан до этого. Понятно, что при первом выполнении скрипта она не играет никакой роли. Цикл всегда был заменен на цикл повторить ..., т.к. нам больше не надо, чтобы объект двигался всегда.
Соберите такой скрипт.
Теперь посмотрим, что будет делать второй объект. Он должен получить сообщение, после чего совершить какие-нибудь действия:
Таким образом, второй скрипт не начнет выполняться, пока первый не передаст ему сообщение «первый вызывает второго». Обратите внимание, что команда спрятаться первого объекта находится ниже, чем передать .... Это значит, что у нас не совсем последовательное выполнение скриптов. Ведь первый еще не завершается, когда начинается второй. В принципе, чаще именно так и бывает. Добавьте на сцену второй объект и запрограммируйте его как показано выше.
Изменение размеров объектов
Дополнительно на этом уроке уделим внимание еще одной функциональной возможности Scratch, которая позволяет изменять размер объектов. Вы уже могли заметить, что холст слишком маленький, а добавляемые на него объекты зачастую слишком крупные. В Scratch можно менять размер объектов вручную или программно.
В первом случае используются две последние кнопки в ряде из четырех кнопок вверху:
Здесь первая кнопка позволяет дублировать (копировать) объект. При этом копируются и все его скрипты. Вторая кнопка предназначена для удаления объекта. Может случиться, что добавленный объект оказался лишним. Его можно будет удалить с помощью этой кнопки. Третья кнопка отвечает за увеличение объекта, а четвертая — за его уменьшение.
После того, как любая из этих кнопок выбрана, курсор мыши меняет свой вид. Далее следует щелкнуть по объекту, которые мы планировали изменять. После окончания изменений следует щелкнуть курсором мыши в пустое место холста, чтобы сбросить выбранный инструмент.
Другой способ изменить размер объектов — использование специальных команд в скрипте (программе). Это значит, что размер объекта можно изменять с помощью программы. Вот эти две команды:
Команда изменить размер на ... увеличивает или уменьшает объект на указанное количество точек. Положительные числа в поле будут увеличивать объект, а отрицательные (с минусом) — уменьшать его.
Команда установить размер … % вычисляет размер объекта, относительно его оригинального (самого первоначального) размера. 100% - это и есть оригинальный размер. Если прописать в поле 50, то объект уменьшится в 2 раза, а если 25, то в 4. Скажем, чтобы увеличить героя в 2 раза, требуется задать 200%.