РАБОТА СО СПРАЙТАМИ_
GET, PLOT, CHR$ 0, CHR$ 1
Способности оператора GET не ограничены тем,
что мы описали в предыдущем разделе. Этот оператор предоставляет также
возможность работать со спрайтами, позволяя получать неплохие
результаты в области мультипликации.
Режим [Е| в данном спучае не отключается
автоматически после ввода одного символа, как зто происходит в
редакторе, возврат к курсорам [L] или [С| необходимо делать
принудительно повторным нажатием CS/SS
Формат оператора таков:
GET < строковая переменная >, < горизонтальная координата >,
<вертикальная координата> [, <ширина>, <длина>] [;<тип>]
Действие оператора элементарно: он помещает в
<строковую переменную> («фотографирует»)
прямоугольную область экрана. <Ширина> и <длина> этой
области измеряется в знакоместах, < координаты > верхнего левого
угла — в пикселях. Сделать «отпечаток» с этой области
можно, выводя <строковую переменную> операторами PRINT или PLOT в
любое место экрана. При этом с помощью CSIZE возможно изменение
масштаба изображения (CSIZE в нашем «фотопроцессе» играет
роль увеличителя). Аналогия с фотографией на этом не исчерпывается:
значения параметра <тип> определяют, будет ли наша
«фотография» черно-белой или цветной. Нулевое значение
параметра указывает на то, что запомнить следует только изображение, а
единица — изображение с атрибутами. По умолчанию параметры
принимают следующие значения: <ширина>=<длина> = 1,
<тип>=0. Отметим, что установка CSIZE 0 не позволит Вам
воспроизводить картинку с помощью PRINT. Перейдем к примеру.
5 CSIZE 8
10 PRINT "BOMM!"'""BAMM!": REM Вывели две надписи 20 CIRCLE 16, 159, 5: REM В промежутке нарисовали окружность 30 GET А$, 0, 175, 5, 4; 0: REM «Сняли» надписи вместе с окружностью
40 PRINT AT 0,0; OVER 1; А$: REM Стираем нашу картинку 50 FOR 1=1 ТО 150: REM Вновь и вновь, двигаясь по диагонали... 60 PLOT I, 175—1, А$: REM ...воспроизводим картинку... 70 OVER 1: PLOT I, 175-1, A$:OVER 0:REM ...и тут же снова ее
стираем 80 NEXT I
Ну, чем не мультипликация!
Мы убедились, что оператору GET «по
зубам» и символы, и графика. Остается выяснить, что же
представляет собой полученная нами переменная А$. Это может
понадобиться для конструирования спрайтов «в уме», без
помощи оператора GET, что, как мы покажем, может дать определенные
удобства.
Первым элементом такой переменной всегда
является управляющий символ CHR$ 0 или CHR$ 1 и это сразу выделяет
спрайты из числа обычных символьных переменных Код 0 говорит о том, что
за ним следуют 8 байт, которые должны интерпретироваться как
закодированное изображение символа 8x8 пикселей (аналогично тому, как
кодируются символы UDG). Код 1 предупреждает интерпретатор о том, что
эти 8 байт предваряются еще одним, содержащим атрибуты знакоместа.
Таким образом, эти коды совпадают со значением параметра <тип>
оператора GET. Каждое последующее знакоместо (если их больше одного)
представлено таким же блоком из управляющего кода 0 или 1 и следующих
за ним 8 или 9 байт. При необходимости между блоками располагаются коды
управления курсором (символы CHR$8...11, стр.245), которые задают
взаимное расположение знакомест. Попробуйте проанализировать содержимое
переменной А$, полученной в приведенном примере, и
«анатомия» спрайтов будет для Вас понятнее.
Однократное применение GET не позволит Вам
получить спрайт с формой, отличающейся от прямоугольной. Однако
«склеив» (с помощью плюса или JOIN) несколько строковых
неременных, «разбавляя» их кодами управления курсором,
можно получить «суперспрайт» самой экзотической формы
— даже состоящий из несвязанных фрагментов. Фантастические
возможности появляются при объединении в одну переменную обычных
текстовых строк и строк-спрайтов, а также спрайтов типов 0 и 1!
Предоставим Вам возможность поэкспериментировать самостоятельно.