Где находится блок говорить
Перейти к содержимому

Где находится блок говорить

  • автор:

Спрайты

Слово «спрайт» часто используется в программировании игр для обозначения фигурок героев и предметов. Такие фигурки – это на самом деле рисунки или фотографии, то есть компьютерная графика.

Однако спрайт – не только картинка, это объект, наделенный программным кодом и как следствие свойствами и способностями. Со спрайтом можно взаимодействовать как с виртуальной сущностью, отдавать ей команды и получать от нее данные.

Кот в Scratch – не единственный объект-спрайт. Добавить на сцену другие можно несколькими способами: загрузить картинку с компьютера, нарисовать в самой среде программирования, выбрать из библиотеки. Для всего этого в Scratch предусмотрено специальное меню, которое находится внизу справа на панели спрайтов:

Добавление спрайтов

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

Библиотека спрайтов

После клика по нему он появится на сцене. Также на панели спрайтов под свойствами появится его иконка. Рядом с иконкой кота. Свойства объекта, где вы задаете ему имя, положение, размер и поворот, отображаются только для того спрайта, который выделен.

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

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

Сейчас надо запомнить, что когда мы работаем с блоками, следует обращать внимание на то, какой объект выделен. В Scratch появляется подсказка в верхнем правом углу поля редактора кода. Там бледным цветом отображается фигурка выделенного на данный момент спрайта. А значит весь код, который вы видите в рабочей области, относится только к данному герою.

Выделение спрайта

Когда выделяется другой спрайт, то код предыдущего становится невидимым.

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

В Scratch копировать собранные в программу блоки можно как в пределах одного проекта, так и переносить копию в «рюкзаке» из одного проекта в другой. Рюкзак находится внизу интерфейса среды разработки.

Допустим, у нас есть проект под названием «Проект 1», где мы составили программу движения кота туда-сюда. Мы хотим скопировать этот код в «Проект 2». Тогда мы заходим в первый проект, открываем рюкзак и перетаскиваем сюда конструкцию блоков.

При этом надо помнить правило: переносится участок кода от верхнего блока, за который мы держимся, и блоки, расположенные ниже него. Если вы взялись за блок, расположенный где-то в середине программы, то верхние блоки оторвутся и не будут захвачены.

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

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

Если надо скопировать код в пределах одного спрайта, надо кликнуть по конструкции правой кнопкой мыши и в контекстном меню выбрать «Дублировать».

Дублирование блоков кода

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

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

В Scratch начало отсчета, то есть точка с координатами (0; 0), находится в центре сцены. Общая ширина сцены составляет 480 точек. Это значит, что координата x может принимать значения от -240 до 240. Общая высота сцены составляет 360 точек. Это значит, что координата y может принимать значения от -180 до 180.

Хотя работу с фонами мы будем изучать позже, добавим на сцену координатную сетку. Это поможет нам сориентироваться в системе координат Скретча. Чтобы выбрать фон из библиотеки, надо нажать на лупу в меню сцены, которое находится в нижнем правом углу окна, на панели «Сцена».

Добавление фона на сцену

Откроется библиотека фонов, прокрутите ее в самый низ и выберите фон «Xy-grid». На сцене появится координатная сетка.

Фон координатная сетка

Давайте уменьшим размер наших спрайтов раза в два, то есть примерно до 50%, чтобы они не занимали большую площадь сцены, а больше походили на точку. Теперь поиграем с их координатами. Для этого можно менять значения x и y на панели свойств и смотреть, где после этого окажется герой. Или просто перетаскивать мышью спрайт на сцене и смотреть как меняются x и y в свойствах.

Например, если x = 0, y = 150, спрайт окажется в центре по горизонтали и вверху по вертикали. Если x = 200, y = 0, то спрайт окажется справа по горизонтали и в центре по вертикали.

На самом деле не обязательно до запуска программы устанавливать спрайты в нужное место с помощью мыши или панели свойств. Обычно это делают программно, с помощью специальных блоков кода, находящихся в разделе «Движение». Одним из управляющих местоположением блоков является команда «перейти в x: … y: …». Вместо точек указываются желаемые координаты.

Эта команда быстро перебрасывает спрайт в заданную точку, поэтому ее часто используют в начале программы:

Использование команды перейти в x y

В приведенном примере, где бы ни стоял на сцене спрайт до запуска программы, как только будет нажат зеленый флажок, герой тут же окажется в точке (0; 50).

Отметим напоследок про слои. Наше пространство не двумерное, как плоскость, а трехмерное. У нас есть высота, ширина и длина. Хотя Scratch позволяет создавать только двумерные анимации, на самом деле даже в 2D-анимации есть своего рода третье измерение. Это слои.

Пусть по сцене перемещаются два спрайта. Что будет когда их координаты совпадут? Ничего. Они не столкнуться и не затормозят друг друга. Один спрайт пройдет как бы позади другого, а другой – поверх первого. Каждый живет на своем слое плоскости и ему нет дела до другого.

Однако бывает важно, слой какого спрайта расположен выше, то есть впереди. Посмотрите на рисунок:

Слои в Scratch

Слева слой ракеты расположен выше, слоя кота. Справа, наоборот, кот находится над ракетой.

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

Блоки изменения очередности слоев находятся в фиолетовой секции «Внешний вид». Это команды «перейти на передний/задний фон» и «перейти вперед/назад на … слоя».

Команды перехода между слоями в Scratch

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

Для выполнения задания потребуются две дополнительные команды – «повернуться к указатель мыши», «повернуть по часовой стрелке на … градусов» (вместо слов «по часовой стрелке» на блоке изображена дуговая стрелка).

X Скрыть Наверх

Программирование в Scratch. Курс

Последовательное и одновременное выполнение скриптов

В прошлых уроках мы соединяли блоки команд в конструкции, которые можно называть маленькими программками. Также их можно назвать скриптами. В одном проекте может быть множество скриптов. Например, если есть два героя-спрайта, вероятно у каждого будет свой скрипт, своя маленькая программа. А весь проект – это большая общая программа, состоящая из множества мелких.

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

Когда для каждого спрайта одного проекта вы добавляете свою конструкцию блоков, которая начинается с команды «когда флажок нажат», то как только игра запускается, оба героя начинают параллельно независимо друг от друга выполнять свои команды. Это пример одновременного выполнения скриптов.

Более того, один и тот же спрайт может содержать два независимых скрипта, каждый из которых будет выполняться в своем потоке. Рассмотрим пример. Пусть кот ходит по сцене и при этом меняет свой костюм.

Два скрипта у одно спрайта

В Scratch многие спрайты на самом деле состоят не из одного изображения, а из нескольких. Это можно увидеть на вкладке «Костюмы».

Костюмы спрайта

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

В приведенном выше примере блоков кода оба скрипта будут выполняться одновременно. Мы увидим, что кот не только перемещается, но еще двигает ногами. Этот эффект возникает от того, что изображения-костюмы быстро меняются.

Если отсоединить блок «когда флажок нажат» от первого скрипта, то при запуске игры кот будет стоять на месте, будут двигаться только его ноги.

Если же мы отсоединим блок «когда флажок нажат» только от второго скрипта, то кот будет перемещаться, но его ноги не будут двигаться.

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

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

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

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

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

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

Блок передачи сообщения

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

И как только она получит сообщение, она покажется и начнет ходить.

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

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

Чтобы добавить новое сообщение, надо кликнуть по маленькому треугольнику в этих командах и в раскрывающемся списке выбрать «Новое сообщение».

Создание нового сообщения

После этого на экране появится диалоговое окно, куда вводится сообщение. Например, «кот вызывает собаку».

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

При этом надо понимать, что если, например, кот передает сообщение «кот вызывает собаку», то собака должна получать именно это сообщение, а не какое-либо другое. Иначе она не будет реагировать.

Составьте программу по следующему описанию:

  1. Кот недолго ходит по сцене, потом останавливается, но не исчезает.
  2. Появляется второй спрайт и тоже недолго ходит по сцене.
  3. Когда второй спрайт останавливается, кот снова начинает недолго ходить по сцене.
  4. Когда кот останавливается во второй раз, на сцене появляется третий недолго бегающий спрайт.

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

X Скрыть Наверх

Программирование в Scratch. Курс

Блок сенсоров

Сенсоры — одна из категорий блоков Скретч. Блоки этой категории имеют голубой цвет и используются для определения и измерения того, как объекты взаимодействуют друг с другом, или для обнаружения определенных движений клавиатуры и мыши. Например, блоки сенсоров можно использовать для обнаружения прикосновения одного спрайта к другому.

Блоки

В настоящее время существует 18 блоков сенсоров: 3 обычных блока, 5 логических блоков и 10 блоков репортёров.

Описание: Проверяет, касается ли спрайт указателя мыши, края или другого спрайта.
Описание: Проверяет, касается ли спрайт заданного цвета.
Описание: Проверяет, касается ли первый цвет, цвет спрайта, со вторым цветом.
(расстояние до (указатель мыши v))

(расстояние до (указатель мыши v))

Описание: Сообщает расстоянии в пикселях между спрайтом и указателем мыши или указанным спрайтом, даже если он скрыт.

спросить [Как тебя зовут?] и ждать

спросить [Как тебя зовут?] и ждать

Блок внешнего вида

Блок внешнего вида — это блок, который управляет внешностью спрайта.

Список блоков

говорить [] () секунд

говорить [] () секунд

Описание: Благодаря этому блоку спрайт может говорить указанное сообщение кол-во секунд (с помощью речевого пузыря).

сказать []

Описание: Благодаря этому блоку спрайт будет говорить (с помощью речевого пузыря) определенное сообщение до тех пор пока его не остановит блок остановки, другой блок речи или сам пользователь.

думать [] () секунд

думать [] () секунд

Описание: Благодаря этому блоку спрайт будет «думать» определенное кол-во секунд (выводить на экран сообщение в облачке)

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *