Движение автомобиля
Таблица 13
Следующий пример,который мы рассмотрим, использует два разных базовых примитива для создания анимации: квадрат и круг. Используя эти примитивы, построрим движущийся автомобиль. Для построения испульзуем два базовых примитива: квадрат и круг. В таблице 13 показан соответствующий код. Рассмотрим структуру программы. Строка, обозначенная индексом #1, определяет пустой лист базовых примитивов. Строка #2 задает форму четырех примитивов: 2 квадрата и два круга. Строка #3 задает массив, определяющий цвета примитивов. Цикл <for i in range (4):> заполняет пустой лист примитивами, причем строка #6 t[i].shapesize(dx[i],dy[i]) (i=0,3) преобразуют квадраты в прямоугольники, i=1 и i=2 соответствуют кругам с удвоенным размером посравнению с исходным размером. Цикл while True с кодами внутри бесконечного цикла определяют дбижение автомобиля вдоль горизонта. Несколько статических кадров анимации показаны в правой части таблицы 13.
Прыгающий клоун
В этом примере участвуют следующие базовые примитивы черепашьей графики: круг, квадрат и треугольник. Используя эти три примитива, а также подобрав занятную логику их движения можно создать интересную композицию. Код программы представлен в таблице 14. Представленная программа состоит из 4-ех основных блоков. Коды, расположенные между линиями 1 и 2 определяют функцию которая вводит обьекты (примитивы) черепашьей графики. Каждый обьект имеет следующие параметры:
primitive – параметр в виде строки, который может принимать названия основных базовых форм черепашьей графики(черепашка, квадрат, круг, треугольник);
w, h – ширина и высота обьекта. Если величины w и h отличаются друг от друга, квадрат превращается в прямоугольник, круг – в овал, равносторонний треугольник – в равнобедренный, черепачка- растягивается вдоль горизонтальной и вертикальной осей;
параметр clr определяет цвет обьекта;
x,y – координаты, определяющие положение обьекта на координатной плоскости.
Таблица 14
Строки, расположенные между цифрами 2 и 3 конкретизируют все параметры обьектов для создания нашего клоуна. Обьектами со цвоими цветами и положением на плоскости являются, как было сказано выше, квадрат, круг и треугольник.Строки программы между цифрами 3 и 4 задают анимацию собранного клоуна: клоун мигает глазами, его шляпа подпрыгивает, он разводит руки. Все движения периодически повторяются, создавая анимационный эффект.
Анимация изображений, построенных из полигонов
Для того, чтобы осуществить анимацию (движение) фигуры, рассмотренной в предыдущем параграфе, построенной из нескольких обьектов, необходимо применить команды движения к каждому из составляющих фигуру обьекту. Сейчас мы разберем варианты построения изображений на основе простых геометрических фигур. Такой метод позволит сформировать изображение, состоящее из нескольких геометрических фигур как один обьект и применить к нему существенно меньшее количество команд движения, упростив программу. Начнем с простешей фигуры: прямоугольника.
Анимация прямоугольника
Как мы уже говорили анимация работает как серия изображений, которые немного отличаются. Чтобы создать анимацию перемещения прямоугольника вправо, нам необходимо нарисовать прямоугольник, затем обозначить его как один обьект. Сделав это, мы сможем применить к прямоугольнику как к единому обьекту, все команды библиотеки turtle. В таблице 15 показана простая программа, реализующая нашу идею. Пoясним подробно код таблицы. Код t.begin_poly() между линиями 1 и 2 дает команду на создание полигона (в нашем случае прямоугольника). К нему (пямоугольнику) затем можно будет применять все команды библиотеки, так же, как мы применяем их к простым примитвам таким как turtle, квадрат круг, треугольник и т. д. Все коды, расположенные между строками обозначенными 1 и 2, создают полигон (в нашем случае прямоугольник). Длее, полученный прямоугольник добавляется к экрану(строка 4). Код линии 3 поворачивает полученный обьект-прямоугольник на 90 градусов. Теперь мы получили новый turtle-обьект (линия 5), к которому применимы все команды библиотеки. Обратим внимание на то, что в этом случае обьект-прямоугольник можно поворачивать (как видно из изображений, показанных в правой части таблицы) а также изменять размер полученного изображения с использованием команды t.shapesize (размер изображения). Несколько последовательных положений прямоугольника обьединенных в одном кадре с использованием команды t.stamp()), показаны на изображениях правой части таблицы.
Таблица 15
Пульсирующее сердце
Применим указанный прием для воспризведения пульсирующего сердца. Соответствующий скрипт программы показан в таблице 16.
Таблица 16
Скрипты между линиями 1 и 2 создают форму сердца из полигона с использованием основных команд черепашьей графики и базовых команд языка Python. Строки между линиями 2 и 3 определяют полученную геометрию формы сердца как обьект черепашьей графики. Коды между линиями 3 и 4 определяют бесконечный цикл, в котором размер сердца периодически изменяется, то увеличиваясь, то уменьшаясь.
Движущийся автомобиль
Используя указанный метод, можно построить более сложную геометрическую форму а затем применить к полученной форме все команды черепашьей графической библиотеки. Построим схематическое изображение формы автомобиля по заданным координатам вершин. Наш автомобиль будет состоять из следующих компонентов: кузов из двух полигонов (четырехугольник и трапеция), а также первое и второе колеса. Поясним коды таблицы 17. Команда, обозначенная линией с индексом *, обьявляет создание сложного обьекта, состоящего из нескольких полигонов. Первый четырехугольник (часть кузова автомобиля) задается кодами между линиями 1 и 2. Вершины первого многоугольника обозначены переменными pos1, pos2, pos3, pos4, сам полигон определяется переменной poly1. Коды между линиями 1 и 2 Строка с индексом ** добавляет первый полигон в геометрическую форму, которую мы хотим создать. Аналогично добавляется второй полигон с вершинами pos5, pos6, pos7 и pos8 (коды между линиями 2 и 3). Создав два полигона, формирующих кузов машины, добавляем первое и второе колесо с использованием кодов begin_poly() и end_poly() (коды между линиями 3 и 4). Создав автомобиль с использованием полигонов, определяем обьект car=turtle.Turtle(shape='car') с помощью черепашьей графики (коды между линиями 4 и 5). Движение автомобиля определяется строками, обозначенными индексами #6, #7, #8, через функцию(линия ***) motion с параметром angle. Несколько статических кадров полученной анимации показаны на изображениях в правой части таблицы.
Таблица 17
Движение автомобилей вдоль холмистой дороги
В этом примере рассмотрим как создать анимацию трех автомобилей с водителями вдоль холмистой дороги. При этом используем прием прошлого примера: автомобили с водителями построены с помощью полигонов-многоугольников. Этот метод позволяет использовать почти все команды черепашьей графики, в частности повороты изображения на зданный угол а также сжатие и растяжение обьекта, конечно, в добавление к основным командам графики. Полный код и несколько статических кадров показаны в таблицах 18-1 ,18-2 и 18-3) В представленном коде выделены следующие блоки: функция для построения полигонов определяется строками между линиями 1 и2; функция для построения окружностей(колеса автомобиля и глаза водителя расположена между строками 2 и 3; коды обращения к функции построения кузова автомобиля размещены между линиями 3 и 4; колеса автомобиля представлены кодами строк между линиями 4 и 5; коды, создающие водителя представлены строками между линиями 5 и 6; строки межу линиями 6 и7 определяют обьект автомобиль с водителем; коды между линиями 7 и 8 задают еще два автомобиля с использованием стандартной функции clone() черепашьей графики; строки между линиями 8 и 9 задают бесконечную анимацию- движение автомобиля; блоки между линиями 8 и 10, 10 и 11, а также между 12 и 13 определяют движение автомобилей по холмам. Изображение холмистой поверхности вставлено в окно экрана с использованием функции wn.bgpic('Street7.gif'), где файл 'Street7.gif' , определяющий изображение должен иметьрасширение gif и р должен быть расположен в том-же фолдере где основной исполняющий файл. Изображение окна экрана и код может быть скачан по адресу:
https://github.com/victenna/Cars-are-driven-over-the-Hill
Остановимся подробнее на описании представленных функций. Функция для построения полигонов фактически строит четырехугольники и поэтому определяется четырьмя вершинами: x1,y1; x2,y2; x3,y3; x4,y4. Кроме этого функция имеет в качестве параметров цвет прямоугольника и цвет окаймляющей его линии (в нашем случае цвет окаймляющей линии для всех четырехугольников черный). Функция для построения окружностей имеет следующие параметры: координаты точки (x,y), от которой начинаем рисовать круг, а также радиус круга r, и кроме этого цвет круга и окоймляющей его линии. Все обращения к этим функциям расположены между линиями 3 и 5. Кроме этого программа с помощью этих функций рисует и водителя.
Таблица 18-1
Таблица 18-2(продолжение Таблицы 18-1)
Таблица 18-3(продолжение Таблицы 18-2)
Движение автомобиля по окружности в вертикальной плоскости
Если все блоки, начиная с линии 6 и ниже заменить на те, что представлены ниже в таблице 19, получим иной сценарий движения автомобиля (петля Нестерова или американские горки). В этом примере с помощью черепашьей графики программы Python создаем анимацию: движение автомобиля вдоль вертикальной петли. Сама петля с окружающим пейзажем введена в окно экрана файлом изображения, выбранным из интернета. Файл изображения окна следующий: Street9(4).gif. Этот файл можно скачать по адресу:
https://github.com/victenna/Cars-are-driven-over-the-Hill
Таблица 19
Спиннер
В этом примере также, как и в предыдущем, строим полигоны для создания простого спиннера. Соответствующая программа показана в таблице 20. Строки между цифрами 1 и 2 определяют функцию для создания кругов, формирующих спиннер. В строках между цифрами 2 и 3 обращаемся к функции и задаем положение кругов и их цвета. Полигон (треугольник), являющийся основанием для спиннера, задан координатами в строках между цифрами 3 и 4. Наконец вращение самого спиннера определяется командами цикла, расположенными между цифрами 4 и 5.
Таблица 20
Спрайт анимация на основе библиотеки
Python
-
Turtle
В предыдущих разделах мы познакомились с принципами анимации, создаваемой с помощью стандарных примитивов, встроенных в библиотеку turtle. Теперь научимся создавать проекты с использованием обьектов-изображений, называемых спрайтами, при этом существенно расширив возможности анимации. Обьектами могут быть животные , люди, цветы, фрукты и т. д. Каждый спрайт представляет собой неподвижную картинку (изображение). Быстро сменяющая друг друга серия этих картинок составляет анимацию и называется спрайтовой анимацией. Создавая программу, мы заставляем спрайты пермещатюся по экрану а также взаимодействовать друг с другом, например, направление движения одного обьекта может изменяться при соприкосновении с другим обьектом либо, характер движения или цвет обьекта изменяется по команде от другого обьекта. Действия, которые выполняет спрайт, полностью зависят от написанного кода. Один проект может иметь несколько спрайт(sprite)-изображений, каждое из которых должно быть введено в программу с использованием соответствующих файлов. Изображения можно выбрать из Интернета, либо нарисовать самому, либо воспользоваться спарйтами библиотеки популярного в настоящее время языка Scratch, предназначенного для обучения детей. Библиотека языка Scratch содержит много спрайт-изображений, каждое из которых имеет несколько костюмов. Каждый из костюмов фактически является отдельным изображением, отличающимся от предыдущего таким образом, что используя все костюмы в совокупности с помощью кодов программы можно созадвать анимацию изображений. Когда студент хорошо освоился с основами языка Scratch, в котором все команды представлены в виде блоков, появляется желание создать аналогичную программу с помощью текстового языка. Приходит на помощь язык программирования Python. Язык содержит множество различных библиотек, многие из которых используются профессиональными программистами и известными компаниями для создания серьзных программ. Одной из наиболее простых библиотек языка, приспособленной для школьников 12+ и встроенной в стандартную версию языка (ее не нужно дополнительно скачивать-инстолировать), является библиотека Turtle. Большинство команд этой библиотеки идентичны блочным командам языка Scratch, и в этом ее преимущество перед другими библиотеками. Поэтому студенту, знакомому с языком Scratch нетрудно освоиться с основами языка Python. Однако, как мы видели в предыдущих разделах, библиотека Python- Turtle содержит лишь несколько стандартных изображений, которыми можно пользоваться для создания sprite-анимаций: квадрат, круг, стрелка, черепашка. Считается, что библиотека Turtle предназначена в основном для рисования геометрических фигур и анимаций с использованием shape-images этой библиотеки. Однако это не так. Простая и понятная для детей 10+ библиотека Turtle имеет в своем составе команды, позволяющие детям создавать отличные анимационные проекты, наподобие тех, которые создаются с помошью языка Scratch. Нужно лишь научиться добывать нужные нам для проекта изображения (из интернета, либо рисовать самим), научиться вводить их в программу и контролировать движения этих изображений с помощью команд библиотеки. Итак приступим.
Скольжение одиночного изображения
На первом этапе научимся передвигать единичный спрайт-изображение в заданном направлении. В качестве спрайт-изображения выберем тыквенного человечка, назовем его памкин (на английском pumpkin-тыква) . В качестве фона , на котором будет двигаться памкин, выберем пешеходный переход. Во-первых, нам надо найти и запомнить изображения памкина и фона в виде файлов в компьютере. Следует учесть, что все файлы изображений, которые используются в кодах библиотеки turtle должны иметь расширение gif. Обычно размер спрайт-изображения по горизонтали и вертикали не превышает 100-200 пикселей. Изображения фона, заполняющего экран, имеет размеры примерно 800-1200 пикселей по горизонтали и не более 750 пикселей по вертикали. Предположим, мы нашли нужное нам спрайт-изображение памкина, изображение фона и запомнили их в нужном формате(gif) в компьютере. Теперь, используя коды библиотеки turtle, создаем программу (скрипт) которая передвигает памкина вдоль горизонта на фоне изображения-улицы.
В таблице 21 показан соответствующий скрипт.
Таблица 21
Поясним работу представленной программы. Первая строка вызывает библиотеки языка Python turtle и time, т. е. Теперь мы можем пользоваться любой командой этих библиотек. Вторая строка определяет обьект Screen (обозначили его с помощью переменной wn), далее установили размер экрана (по горизонтали 1000 пихелей, по вертикали 700 пихелей) , ввели изображение фона-улицы, а затем добавили спрайт-изображение памкина в окно экрана: файл man.gif. Затем определили обьект с именем man: (man=turtle.Turtle('man.gif')). Теперь можем применять к введенному обьекту man все команды библиотеки графической библиотеки turtle. Запустив программу, вы увидите как наш обьект-изображение скользит по экрану.
Несколько существенных замечаний, касающихся указанной выше программы:
Файлы изображений должны располагаться в той же директории (folder), что и основной script(код) программы.
Сами изображения должны быть расположены на прозрачном фоне, иначе фон изображения наложится на основной фон экрана и исказит его.
Для того, чтобы обеспечить все приведенные требования к правильной настройке изображения, воспользуемся следующими рецомендациями: находим интересующее нас изображение в интернете, копируем его с помощью команды Ctrl+c, открываем один из редакторов, например, редактор Paint.net (предварительно бесплатно скачав-установив его на свой компьютер) и, используя команду Ctrl+v, получаем выбранное нами изображение на экране редактора. Для того, чтобы изменить размеры изображения нужно использовать опцию Image->Resize для того, чтобы сделать прозрачный фон. Затем следует запомнить полученное изображение в виде файла с расширением gif и поместить его в директорию, где расположен основной файл с кодами языка. Обратите внимание на то чтобы имя файла изображения в директории совпадало с именем файла изображения в коде исполнительного файла. После запуска программы в Python редакторе получаем анимацию-движение, несколько кадров которой показано ниже.